list_tools
Discover Apideck tools. Call with no args for domain index; filter with domain/search_terms/scope.
scopedomainsearch_terms
com.apideck由 apideck.com 發布v0.1.13更新於 Nov 2, 2026
Apideck Unified API MCP — 330 tools across 200+ SaaS connectors (accounting, CRM, HRIS, ATS).
Apideck 的 MCP 伺服器開放 Apideck Unified API,讓助理透過 200 多個連接器讀寫會計、CRM、HRIS、ATS、檔案儲存等 SaaS 資料。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/com.apideck%2Fmcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"apideck": {
"type": "http",
"url": "https://mcp.apideck.dev/mcp",
"headers": {
"x-apideck-api-key": "<VALUE>",
"x-apideck-app-id": "<VALUE>",
"x-apideck-consumer-id": "<VALUE>"
}
}
}
}[npm version] [MCP Registry] [Glama score] [voke MTQS] [License: MIT]
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent to 200+ connectors — accounting systems, HRIS platforms, CRM, file storage, and more — through one integration.
[Install in Cursor] [Install in VS Code]
Recommended — prebuilt bundle:
Drag and drop the prebuilt mcp-server.mcpb onto Claude Desktop. Claude reads manifest.json to prompt for credentials and spawn the server — no manual config needed.
[!NOTE] Learn more about Desktop Extensions.
Local stdio (npx) alternative:
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Restart Claude Desktop after saving. Pin a specific version by replacing @apideck/mcp with @apideck/[email protected].
Set credentials in your shell:
Hosted (recommended):
Local stdio (npx):
The start command reads credentials from environment variables only — it does not accept --api-key / --consumer-id / --app-id flags.
Settings → Cascade → Manage MCPs → View raw config, then paste:
Apideck ships a Claude plugin bundle (.mcpb — Anthropic's Model Context Protocol Bundle format). Drop it into Claude Desktop and you get the full server (380+ tools: every endpoint tool plus 4 workflow tools) with API key / consumer ID / app ID prompted via the standard plugin UI.
Each release attaches mcp-server.mcpb to the latest release. To build it yourself: pnpm mcpb:build → dist/mcp-server.mcpb. Open the .mcpb with Claude Desktop's plugin installer; Claude Desktop reads manifest.json to wire credentials and spawn the server.
380+ tools across 10 unified APIs (run list_tools({}) for live per-domain counts):
Intent-grouped workflows orchestrate multiple calls behind a single MCP tool — saving agents the round-trips and field-plumbing they routinely get wrong.
The server is live at:
Pass credentials via headers:
Some clients can send only one credential, such as a bearer token. Put the API
key in Authorization and the ids in the URL:
service_id works the same way. Precedence: header > query param > env var.
Empty values are ignored. The API key is never accepted in the URL, because
URLs end up in logs.
To let an end user's browser or agent call tools without your API key, create a
Vault session
on your backend and pass its session_token instead:
The server forwards x-apideck-auth-type: JWT on every Apideck API call, the
same way the API Explorer authenticates sessions. Any other value keeps API-key
auth. A few limits:
APIDECK_API_KEY is never sent as a JWT.The consumer ID is optional at connect time. Leave APIDECK_CONSUMER_ID /
x-apideck-consumer-id unset to start the server unscoped, then supply or
override the consumer per call by passing a consumer_id argument to any tool:
Precedence: per-call consumer_id argument > x-apideck-consumer-id header >
?consumer_id= query param > APIDECK_CONSUMER_ID env var.
webhook-event-logs-all) and
vault-connections-all.consumer_id (or the env/header) for those.To pin identity to the boot header/query/env and stop agents from switching consumer
or connection per call, start with --lock-identity (CLI) or append
?lock_identity=true (hosted). Locked calls ignore per-call consumer_id /
service_id arguments. Off by default. Vault consumer tools that take
consumer_id as a path parameter (e.g. vault-consumers-one) only accept the
locked consumer; any other value, or no locked consumer, is refused.
service_id path parameters (e.g. vault-connections-one) are unaffected.
Agents discover tools progressively — ~85% fewer tokens than loading all 380+ schemas upfront:
Put operation fields directly in input, using the contract returned by
describe_tool_input. Dynamic execution validates the arguments before dispatch;
malformed wrappers and schema violations return isError: true with
code: "invalid_tool_input", a field path or issue paths, and no downstream call.
Write tools also reject unknown top-level fields, so nothing undeclared reaches
the API. Validation errors do not echo submitted values. Per-call consumer_id and
service_id overrides remain supported; identity-lock rules still apply.
When a service_id is set, list_tools only lists tools the connector
supports, and calls to an unsupported resource return
code: "unsupported_resource", which means the connector can't serve it, not
that the result is empty.
Request schemas omit read-only response fields, while retaining writable linked
IDs and required path IDs. This does not add idempotency or make write retries safe.
You can combine dynamic mode with a scope filter:
Code mode exposes two tools instead of 380+. Designed for agents that prefer calling endpoints as methods rather than tool calls:
apideck_search — find endpoints by substring, returns camelCase method namesapideck_run — execute a JS script with apideck.<methodName> bound to live endpoint dispatchers, sandboxed in node:vmIf an endpoint call fails with an HTTP error, apideck_run returns the status and the Apideck error body next to the message, matching execute_tool:
Scripts can handle it themselves: catch (e) exposes e.message, e.status and e.body.
The sandbox strips process, require, fs, child_process, and other Node globals — scripts only have access to the apideck object.
Filter tools by HTTP method class:
Repeat the flag to combine scopes (--scope read --scope write). On the hosted
endpoint use a comma-separated query param: ?scopes=read,write. Invalid or
empty values are rejected (CLI parse error / HTTP 400). Scopes apply in every
mode, including code. When the scopes leave out destructive, execute_tool
is also marked non-destructive (destructiveHint: false).
The runtime automatically retries failed requests so transient errors don't surface to your agent:
ECONNRESET, ECONNREFUSED, ETIMEDOUT, and similarFile Storage endpoints that return images or audio send them as native MCP content blocks rather than base64 strings in JSON:
Agents that support multi-modal MCP content (Claude, GPT-4o) receive the raw bytes — no extra decoding step needed.
MIT
來源:README.md,提交 26d2f4a
Discover Apideck tools. Call with no args for domain index; filter with domain/search_terms/scope.
scopedomainsearch_termsReturn the JSON-Schema input contract for a tool by name.
name必填Invoke a tool by name. `input` is validated against the target schema before dispatch.
name必填inputReturn the list of allowed MCP scopes.
無需輸入參數。
已滿足適用檢查項的 100%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
{ "mcpServers": { "apideck": { "command": "npx", "args": ["-y", "@apideck/mcp", "start"], "env": { "APIDECK_API_KEY": "YOUR_API_KEY", "APIDECK_CONSUMER_ID": "YOUR_CONSUMER_ID", "APIDECK_APP_ID": "YOUR_APP_ID" } } }}export APIDECK_API_KEY="..."export APIDECK_CONSUMER_ID="..."export APIDECK_APP_ID="..."claude mcp add --transport http apideck https://mcp.apideck.dev/mcp \ --header "Authorization: Bearer $APIDECK_API_KEY" \ --header "x-apideck-consumer-id: $APIDECK_CONSUMER_ID" \ --header "x-apideck-app-id: $APIDECK_APP_ID"claude mcp add apideck \ -e APIDECK_API_KEY="$APIDECK_API_KEY" \ -e APIDECK_CONSUMER_ID="$APIDECK_CONSUMER_ID" \ -e APIDECK_APP_ID="$APIDECK_APP_ID" \ -- npx -y @apideck/mcp start{ "mcpServers": { "apideck": { "url": "https://mcp.apideck.dev/mcp", "headers": { "x-apideck-api-key": "YOUR_API_KEY", "x-apideck-consumer-id": "YOUR_CONSUMER_ID", "x-apideck-app-id": "YOUR_APP_ID" } } }}{ "mcpServers": { "apideck": { "url": "https://mcp.apideck.dev/mcp", "headers": { "x-apideck-api-key": "YOUR_API_KEY", "x-apideck-consumer-id": "YOUR_CONSUMER_ID", "x-apideck-app-id": "YOUR_APP_ID" } } }}pnpm mcpb:build # → dist/mcp-server.mcpb (~590 KB)https://mcp.apideck.dev/mcphttps://mcp.apideck.dev/mcp?app_id=<your app ID>&consumer_id=<consumer ID>Authorization: Bearer <your API key>Authorization: Bearer <session_token>x-apideck-auth-type: JWTx-apideck-app-id: <your app ID>x-apideck-consumer-id: <the session's consumer ID>execute_tool({ name: "crm-contacts-all", input: { consumer_id: "acme-inc" } })list_tools({}) → { total: <n>, domains: [{ name: "accounting", count: <n> }, ...], hint: "Call list_tools(domain=X) or list_tools(search_terms=[...])" }
list_tools({"search_terms": ["invoices"]}) → accounting-invoices-all, accounting-invoices-add, accounting-invoices-one, ...
describe_tool_input({"name": "accounting-invoices-all"}) → Full JSON Schema with all parameters
execute_tool({"name": "accounting-invoices-all", "input": {"limit": 10}}) → Invoice data from the connected accounting system{ "mcpServers": { "apideck": { "command": "node", "args": ["dist/bin/mcp.js", "--mode", "dynamic", "--scope", "read"], "env": { "APIDECK_API_KEY": "...", "APIDECK_CONSUMER_ID": "...", "APIDECK_APP_ID": "..." } } }}apideck_search("invoices") → { count: 4, endpoints: [ { name: "accounting-invoices-list", method: "accountingInvoicesList" }, { name: "accounting-invoices-create", method: "accountingInvoicesCreate" }, { name: "accounting-invoices-get", method: "accountingInvoicesGet" }, { name: "accounting-invoices-delete", method: "accountingInvoicesDelete" } ] }
apideck_run({ script: "return await apideck.accountingInvoicesList({ request: { limit: 5 } })"}) → Invoice data from the connected accounting system{"error":"HTTP 401: Unauthorized Request - Application: invalid-test-app not found.","status":401,"body":{"type_name":"UnauthorizedError","detail":"Application: invalid-test-app not found.","...":"..."},"logs":[]}# OpenAI Agents SDKfrom agents import Agentfrom agents.mcp import MCPServerHTTP
agent = Agent( name="Apideck Agent", mcp_servers=[MCPServerHTTP( url="https://mcp.apideck.dev/mcp", headers={ "x-apideck-api-key": "...", "x-apideck-consumer-id": "...", "x-apideck-app-id": "..." } )])# Pydantic AIfrom pydantic_ai import Agentfrom pydantic_ai.mcp import MCPServerHTTP
agent = Agent("anthropic:claude-sonnet-4-5", mcp_servers=[ MCPServerHTTP( url="https://mcp.apideck.dev/mcp", headers={ "x-apideck-api-key": "...", "x-apideck-consumer-id": "...", "x-apideck-app-id": "..." } )])# LangChain / LangGraphfrom langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({ "apideck": { "url": "https://mcp.apideck.dev/mcp", "transport": "streamable_http", "headers": { "x-apideck-api-key": "...", "x-apideck-consumer-id": "...", "x-apideck-app-id": "..." } }})tools = await client.get_tools()pnpm installpnpm build
# Dynamic mode (default)APIDECK_API_KEY=... APIDECK_CONSUMER_ID=... APIDECK_APP_ID=... node dist/bin/mcp.js start
# Static mode (all endpoint tools + workflows)APIDECK_API_KEY=... node dist/bin/mcp.js start --mode static
# Code modeAPIDECK_API_KEY=... node dist/bin/mcp.js start --mode code
# Read-onlyAPIDECK_API_KEY=... node dist/bin/mcp.js start --scope read# OpenAI Agents SDK (local stdio)from agents import Agentfrom agents.mcp import MCPServerStdio
mcp = MCPServerStdio(name="apideck", params={ "command": "node", "args": ["dist/bin/mcp.js", "start", "--mode", "dynamic"], "env": { "APIDECK_API_KEY": "...", "APIDECK_CONSUMER_ID": "...", "APIDECK_APP_ID": "..." }})agent = Agent(name="Apideck Agent", mcp_servers=[mcp]){ "type": "image", "data": "<base64>", "mimeType": "image/png" }{ "type": "audio", "data": "<base64>", "mimeType": "audio/mpeg" }