Docs

OpenAI and tool platforms

Add Amdahl as a remote MCP tool in OpenAI's built-in tools, LangSmith, or any platform that hosts models and calls MCP servers for them

Model platforms — the OpenAI Playground and Responses API, LangSmith, agent frameworks with a "remote MCP server" tool type — call Amdahl server-to-server on your behalf. There is no browser in that loop, so the OAuth flow desktop clients use does not apply: these platforms authenticate with an Amdahl API key sent as a bearer token.

Every setup below is the same three facts in that platform's syntax:

FactValue
Server URLhttps://app.amdahl.ai/mcp
TransportStreamable HTTP
AuthAuthorization: Bearer $AMDAHL_KEY (an amdhl_... API key)

Create the key with amdahl keys create --name "OpenAI" --preset agent and approve it in the console (see Command line (CLI)), or in the console under Settings, then Developer, then Create key. It is shown once. Store it in the platform's secret manager, never in a shared prompt or a config you would paste into a ticket.

The platform's model calls Amdahl with this key on every run, from their infrastructure. Give it the narrowest access that covers the job: Read only (--preset read-only) for a model that should only query, Customer agent (--preset agent) when it should also start chats, run evals, rewrite drafts, or write. Give it an expiry date too, so a forgotten key stops working on its own. See Authentication for what each bundle reaches.

OpenAI built-in tools

In the OpenAI Playground, add a tool, choose OpenAI built-in, then MCP, and fill in the config. The same JSON block works in the Responses API's tools array:

json
{
  "type": "mcp",
  "server_label": "amdahl",
  "server_url": "https://app.amdahl.ai/mcp",
  "authorization": "$AMDAHL_KEY"
}

The authorization value reaches Amdahl as an Authorization: Bearer header, which is exactly how an amdhl_... key authenticates — paste the bare key, with no Bearer prefix of your own.

Two knobs worth setting:

  • Secrets. In the Playground, reference a workspace secret instead of pasting the key inline: "authorization": "{{AMDAHL_KEY}}" (create the secret under Manage Secrets). In API calls, interpolate it from your own environment.
  • Tool scoping. Amdahl exposes exactly six tools: search, research, agents, connections, evals, messages (see Connect your agent for what each does). If the platform supports an allowed-tools list, ["search"] alone gives the model fast read-only lookups; add research to have Amdahl investigate a question and return a cited answer, agents and evals for deliverables and grading, and messages to rewrite outbound drafts.

OpenAI's MCP tool also takes a require_approval setting. search with a read-only key is safe to run unattended; keep approval on for agents, evals and messages actions when the key can write.

Tool hints

tools/list returns each tool with a display title and all four MCP annotations set explicitly, so a platform that reads them can decide which calls need approval without a list of its own:

TooltitlereadOnlyHintdestructiveHintidempotentHintopenWorldHint
searchCustomer searchtruefalsetruefalse
researchCustomer researchfalsefalsefalsefalse
messagesMessage optimizertruefalsefalsefalse
evalsEvalsfalsetruefalsefalse
agentsAgents and routinesfalsetruefalsetrue
connectionsData connectionsfalsetruefalsetrue

Each hint covers the whole tool, so a tool with one destructive action (such as connections with disconnect) is marked destructive. The hints are advice for the client; the key's scopes and the user's role still decide what each call may do.

LangSmith and other platforms

Any platform with a remote MCP tool type takes the same three facts. In LangSmith's Playground, add a tool, choose MCP, and fill in the server URL and an authorization (or headers) field the same way; reference the key through the platform's secret syntax where one exists.

Where the platform asks for raw headers instead of an authorization field, either form works identically. These headers are for server-to-server use only; a desktop client (Claude, Cursor, Codex) signs in over OAuth with the URL alone and needs no header:

code
Authorization: Bearer $AMDAHL_KEY
code
X-API-Key: $AMDAHL_KEY

The workspace the key was minted in is the workspace the model sees — nothing else.

Good to know

  • Rate limit. Production counts calls per credential and per minute by cost: 300 reads, 30 expensive calls (optimize, eval run, research start, Chat start), 60 other writes, and 600 protocol messages. A platform fanning out many parallel tool calls can hit one; the response is a plain HTTP 429, and spacing calls out resolves it. See Rate limits.

  • Request size. Tool-call bodies over 1 MB are rejected.

  • Sessions. MCP sessions expire after 2 hours idle. A stateless caller that reuses an old session id gets a JSON-RPC -32000 error: reinitialize and replay once, never retry in a loop. Details in Reliability and retries.

  • Check the setup. Have the model call the connections tool with {"action": "setup_status"}. It names the workspace the key acts in, the role of the person who created it, and whether drafts can be optimized, with the reason when they cannot. See Check your setup.

  • Verify it works. Ask the model something only your workspace can answer ("what do customers say about onboarding?") — a generic web answer means the tool is not being called; a quote-backed answer means it is.

  • Add the docs server as a second tool. These platforms are tools-only — the model cannot follow a documentation link you put in a prompt. Attaching https://docs.amdahl.ai/mcp alongside the one above lets it read the docs itself. Same shape, minus the auth block, because that server is public:

    json
    {
      "type": "mcp",
      "server_label": "amdahl_docs",
      "server_url": "https://docs.amdahl.ai/mcp",
      "require_approval": "never"
    }

See also