The Model Context Protocol gives AI agents
direct tool access to Soup.net. Instead of browsing the web form, the agent calls
check_recipe and get_briefing as native tools.
MCP works with Codex, Claude Code, Claude Desktop, and other MCP-compatible agents. See also: Anthropic’s extension guide, MCP quickstart.
Log in to the Soup.net dashboard and generate a daily or scoped key. Daily keys rotate automatically. Scoped keys let you restrict access to specific recipe books with a custom expiry.
Chat-style AIs (claude.ai, ChatGPT, Mistral Le Chat, Perplexity) connect via
OAuth — no API key to copy. Add https://mcp.soup.net/mcp as a custom connector,
sign in to Soup.net, and choose which recipe books to share (and read vs. write for each) right in the
consent screen. Per-client steps for each chat AI are at
https://www.soup.net/info/connect.
Developer tools (Codex, Claude Code, Claude Desktop, VS Code, Google Antigravity,
Cursor, Windsurf, Zed) use a Bearer API key — the options below. Most of these
also accept the OAuth flow above if you’d rather sign in than paste a key; point them at
https://mcp.soup.net/mcp and let their built-in OAuth client handle the rest.
Codex uses config.toml, not .mcp.json. Use
.codex/config.toml in a trusted project when the Soup.net key should stay scoped
to that repo. Use ~/.codex/config.toml only when the same Soup.net identity
should apply globally.
Recommended: keep the token in an environment variable available where Codex starts:
[mcp_servers.soupnet] url = "https://mcp.soup.net/mcp" bearer_token_env_var = "SOUPNET_API_KEY"
Set SOUPNET_API_KEY in Codex’s environment, then restart Codex or start a new session.
Verify with /mcp in the TUI or codex mcp list.
This guidance was checked against Codex docs on 2026-05-16. If it fails, consult the OpenAI Developers docs MCP for current Codex MCP configuration.
If you prefer a self-contained project config and understand the secret-handling risk:
[mcp_servers.soupnet]
url = "https://mcp.soup.net/mcp"
http_headers = { Authorization = "Bearer YOUR_API_KEY" }
Do not commit a .codex/config.toml file that contains a token.
claude_desktop_config.json and saveConfig file location:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonImportant: Claude Desktop runs commands from C:\Windows\System32,
so all paths in the config must be absolute.
{
"mcpServers": {
"soupnet": {
"command": "npx",
"args": ["tsx", "/FULL/PATH/TO/soupnet/apps/mcp-server/src/index.ts"],
"env": {
"SOUPNET_BACKEND_URL": "https://mcp.soup.net",
"SOUPNET_API_KEY": "YOUR_API_KEY"
}
}
}
}
Replace /FULL/PATH/TO/soupnet with the absolute path to your local soupnet repo.
{
"mcpServers": {
"soupnet": {
"command": "cmd",
"args": ["/c", "npx", "tsx", "C:\\path\\to\\soupnet\\apps\\mcp-server\\src\\index.ts"],
"env": {
"APPDATA": "C:\\Users\\YOUR_USERNAME\\AppData\\Roaming",
"SOUPNET_BACKEND_URL": "https://mcp.soup.net",
"SOUPNET_API_KEY": "YOUR_API_KEY"
}
}
}
}
Replace C:\\path\\to\\soupnet with the absolute path to your local soupnet repo,
and YOUR_USERNAME with your Windows username.
The APPDATA env var is needed because Claude Desktop doesn’t always expand %APPDATA% correctly.
After restarting, look for the MCP server indicator in the bottom-right of the chat input.
Click it to verify check_recipe and get_briefing are listed.
If your Claude Desktop version supports extensions:
This bundles the same MCP server as the manual config above. The extension stores your API key in the OS keychain.
Add this to .mcp.json in your project root (per-project) or ~/.claude/.mcp.json (global).
Claude Code runs from the project directory, so relative paths work here:
{
"mcpServers": {
"soupnet": {
"command": "npx",
"args": ["tsx", "apps/mcp-server/src/index.ts"],
"env": {
"SOUPNET_BACKEND_URL": "https://mcp.soup.net",
"SOUPNET_API_KEY": "YOUR_API_KEY"
}
}
}
}
{
"mcpServers": {
"soupnet": {
"command": "cmd",
"args": ["/c", "npx", "tsx", "apps/mcp-server/src/index.ts"],
"env": {
"SOUPNET_BACKEND_URL": "https://mcp.soup.net",
"SOUPNET_API_KEY": "YOUR_API_KEY"
}
}
}
}
| Tool | Purpose |
|---|---|
check_recipe |
Check a recipe against Soup.net. Logs your recipe and returns similar recipes with evidence.
Supports clusters and max_chars params for concise responses. |
get_briefing |
Returns the Soup.net briefing — recipe-check format, your recipe books, and a clustered sample of recipes from this user's corpus. Call this before your first check. |
The check_recipe tool accepts a file_url parameter for multimodal evidence
(images, PDFs, audio, video). For files already public on the web, just pass the URL. For private local
files — screenshots, generated artifacts, anything that lives only on your disk — upload them
first via the POST /uploads REST endpoint, then pass the returned URL.
Why this two-step? MCP tool calls pass JSON arguments; binary content has to be base64-encoded inline, which blows the agent's context window on any meaningful image. The upload endpoint sidesteps this with a normal multipart POST, the same shape the Gemini File API uses for the same reason.
Step 1. POST your file to https://mcp.soup.net/uploads with your API key as a Bearer token:
curl -X POST https://mcp.soup.net/uploads \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@/path/to/screenshot.png"
Response (200 OK):
{
"ok": true,
"file_url": "https://mcp.soup.net/uploads/9f3c2e1a-....png",
"content_hash": "sha256-hex...",
"mime_type": "image/png",
"size_bytes": 184320
}
Step 2. Pass the returned file_url to check_recipe as the
file_url parameter. The MCP server detects own-hostname URLs and reads the file directly —
no second HTTP fetch.
GET against
https://mcp.soup.net/uploads/<id>.png always returns 404 — even from the uploading key.
Treat the URL as an opaque reference token, not a download link. (Same model as Gemini File API file handles.)check_recipe returns the same "could not fetch" error as for a missing URL
— no information leak about whether the upload exists.node --versionnpx tsx apps/mcp-server/src/index.ts~/Library/Logs/Claude/mcp*.log%APPDATA%\Claude\logs\mcp*.logIf the server fails with a path error referencing ${APPDATA},
add the expanded APPDATA path to your config’s env block
(shown in the Windows config above).
If your Soup.net server is deployed (e.g., at mcp.soup.net), agents can connect over HTTP
without running a local server. This is the recommended setup for production use.
Each MCP client has a distinct config schema. The blocks below are confirmed working — copy the one that matches your client. Don't mix schemas: the top-level key, URL field name, and required extras differ by client.
Use project-scoped .codex/config.toml for repo-specific Soup.net keys in trusted projects,
or ~/.codex/config.toml only when the same key should apply everywhere.
[mcp_servers.soupnet] url = "https://mcp.soup.net/mcp" bearer_token_env_var = "SOUPNET_API_KEY"
Make SOUPNET_API_KEY available where Codex starts, then restart Codex or start a new session.
Verify with /mcp or codex mcp list. Inline http_headers also works,
but requires secret hygiene. Checked against Codex docs on 2026-05-16; if it fails, consult the OpenAI Developers docs MCP.
Per-project .mcp.json at the repo root, or ~/.claude/.mcp.json for global.
{
"mcpServers": {
"soupnet": {
"type": "http",
"url": "https://mcp.soup.net/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
One-liner equivalent: claude mcp add --transport http soupnet https://mcp.soup.net/mcp --header "Authorization: Bearer YOUR_API_KEY"
Per-project .vscode/mcp.json. The top-level key is servers (not mcpServers),
and inputs is required (use [] if you have no prompts).
{
"servers": {
"soupnet": {
"url": "https://mcp.soup.net/mcp",
"type": "http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
},
"inputs": []
}
User-global config at ~/.gemini/antigravity/mcp_config.json
(Windows: C:\Users\<you>\.gemini\antigravity\mcp_config.json).
Applies to all projects, not a per-project config. Restart Antigravity after saving.
Antigravity also supports self-configuration — you can paste the block below into a chat and
ask the agent to install it.
{
"mcpServers": {
"soupnet": {
"serverUrl": "https://mcp.soup.net/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Note: Antigravity uses serverUrl (not url).
Claude Desktop doesn't speak HTTP MCP natively yet — mcp-remote bridges stdio to HTTP.
{
"mcpServers": {
"soupnet": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.soup.net/mcp",
"--header", "Authorization: Bearer YOUR_API_KEY"]
}
}
}
Requires Node.js.
Agents that can browse the web (ChatGPT, Google Stitch, etc.) can check recipes by visiting:
https://mcp.soup.net/check?key=YOUR_API_KEY
No MCP configuration needed. The web form is designed for AI agents that can fill HTML forms.
Copy-paste this into your AI agent’s system prompt or first message to bootstrap correct understanding. The agent’s own instructions carry more weight than anything in our system — this blurb sets the right mental model so the agent uses the tools correctly from the start.
You already work to understand my taste and judgment — Soup.net makes that understanding persistent and shared across my other agents and sessions. Recipe checks are read-only searches with an append-only logging side effect. Every check makes the corpus smarter for all my agents. There are no destructive operations, so check freely and often. Recipes are from MY perspective (the human), not yours: "As a [my role] working on [my goal], I [prefer/chose] so that [reason]." Context scopes the judgment. Evidence supports the claim — my direct words, my artifacts, or external sources. Every claim and quoted reference needs to be true at the moment you submit. For the full format with examples: call get_briefing (MCP) or visit /docs/recipe-check-guide (web).
max_chars: 2000 keeps responses compact when context is tight. The briefing covers the rest.New to Soup.net? Your corpus starts empty. Bootstrap Your Corpus walks you through seeding it by extracting taste and judgment from your existing AI agent sessions. Pick a few diverse sessions for the best cross-pollination.