{"id":49182924,"url":"https://github.com/apideck-libraries/mcp","last_synced_at":"2026-05-09T00:22:17.049Z","repository":{"id":352046058,"uuid":"1201484128","full_name":"apideck-libraries/mcp","owner":"apideck-libraries","description":"MCP server for Apideck Unified APIs — Accounting, File Storage, HRIS, Vault, Proxy","archived":false,"fork":false,"pushed_at":"2026-04-17T15:35:47.000Z","size":5674,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T17:33:53.018Z","etag":null,"topics":["accounting","ai","ai-agents","mcp-server"],"latest_commit_sha":null,"homepage":"https://mcp.apideck.dev/mcp","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apideck-libraries.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-04T18:33:45.000Z","updated_at":"2026-04-16T09:04:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/apideck-libraries/mcp","commit_stats":null,"previous_names":["apideck-libraries/mcp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/apideck-libraries/mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apideck-libraries%2Fmcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apideck-libraries%2Fmcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apideck-libraries%2Fmcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apideck-libraries%2Fmcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apideck-libraries","download_url":"https://codeload.github.com/apideck-libraries/mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apideck-libraries%2Fmcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32162614,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T17:06:48.269Z","status":"online","status_checked_at":"2026-04-23T02:00:06.710Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accounting","ai","ai-agents","mcp-server"],"created_at":"2026-04-23T02:04:24.331Z","updated_at":"2026-05-09T00:22:17.042Z","avatar_url":"https://github.com/apideck-libraries.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Apideck MCP Server\n\n[![npm version](https://img.shields.io/npm/v/%40apideck%2Fmcp?logo=npm\u0026label=%40apideck%2Fmcp)](https://www.npmjs.com/package/@apideck/mcp)\n[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-com.apideck%2Fmcp-blue)](https://registry.modelcontextprotocol.io/v0/servers/com.apideck%2Fmcp/versions)\n[![Glama score](https://glama.ai/mcp/servers/apideck-libraries/mcp/badges/score.svg)](https://glama.ai/mcp/servers/apideck-libraries/mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nModel Context Protocol server for the [Apideck Unified API](https://www.apideck.com). Connect any MCP-compatible agent to 200+ connectors — accounting systems, HRIS platforms, CRM, file storage, and more — through one integration.\n\n## Quick Connect\n\n[![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](cursor://anysphere.cursor-deeplink/mcp/install?name=Apideck\u0026config=eyJ1cmwiOiJodHRwczovL21jcC5hcGlkZWNrLmRldi9tY3AiLCJoZWFkZXJzIjp7IngtYXBpZGVjay1hcGkta2V5IjoiJHtBUElERUNLX0FQSV9LRVl9IiwieC1hcGlkZWNrLWNvbnN1bWVyLWlkIjoiJHtBUElERUNLX0NPTlNVTUVSX0lEfSIsIngtYXBpZGVjay1hcHAtaWQiOiIke0FQSURFQ0tfQVBQX0lEfSJ9fQ==)\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square\u0026label=Install%20Apideck%20MCP\u0026color=0098FF)](vscode://ms-vscode.vscode-mcp/install?name=Apideck\u0026config=eyJ1cmwiOiJodHRwczovL21jcC5hcGlkZWNrLmRldi9tY3AiLCJoZWFkZXJzIjp7IngtYXBpZGVjay1hcGkta2V5IjoiJHtBUElERUNLX0FQSV9LRVl9IiwieC1hcGlkZWNrLWNvbnN1bWVyLWlkIjoiJHtBUElERUNLX0NPTlNVTUVSX0lEfSIsIngtYXBpZGVjay1hcHAtaWQiOiIke0FQSURFQ0tfQVBQX0lEfSJ9fQ==)\n\n\u003cdetails\u003e\n\u003csummary\u003eClaude Desktop (.mcpb bundle)\u003c/summary\u003e\n\n**Recommended — prebuilt bundle:**\n\nDrag and drop the prebuilt [`mcp-server.mcpb`](https://github.com/apideck-libraries/mcp/releases/latest) onto Claude Desktop. Claude reads `manifest.json` to prompt for credentials and spawn the server — no manual config needed.\n\n\u003e [!NOTE]\n\u003e Learn more about [Desktop Extensions](https://www.anthropic.com/engineering/desktop-extensions).\n\n**Local stdio (npx) alternative:**\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"apideck\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@apideck/mcp\", \"start\"],\n      \"env\": {\n        \"APIDECK_API_KEY\": \"YOUR_API_KEY\",\n        \"APIDECK_CONSUMER_ID\": \"YOUR_CONSUMER_ID\",\n        \"APIDECK_APP_ID\": \"YOUR_APP_ID\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Desktop after saving. Pin a specific version by replacing `@apideck/mcp` with `@apideck/mcp@0.1.15`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eClaude Code CLI\u003c/summary\u003e\n\nSet credentials in your shell:\n\n```bash\nexport APIDECK_API_KEY=\"...\"\nexport APIDECK_CONSUMER_ID=\"...\"\nexport APIDECK_APP_ID=\"...\"\n```\n\n**Hosted (recommended):**\n\n```bash\nclaude mcp add --transport http apideck https://mcp.apideck.dev/mcp \\\n  --header \"Authorization: Bearer $APIDECK_API_KEY\" \\\n  --header \"x-apideck-consumer-id: $APIDECK_CONSUMER_ID\" \\\n  --header \"x-apideck-app-id: $APIDECK_APP_ID\"\n```\n\n**Local stdio (npx):**\n\n```bash\nclaude mcp add apideck \\\n  -e APIDECK_API_KEY=\"$APIDECK_API_KEY\" \\\n  -e APIDECK_CONSUMER_ID=\"$APIDECK_CONSUMER_ID\" \\\n  -e APIDECK_APP_ID=\"$APIDECK_APP_ID\" \\\n  -- npx -y @apideck/mcp start\n```\n\nThe `start` command reads credentials from environment variables only — it does not accept `--api-key` / `--consumer-id` / `--app-id` flags.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWindsurf\u003c/summary\u003e\n\nSettings → Cascade → Manage MCPs → View raw config, then paste:\n\n```json\n{\n  \"mcpServers\": {\n    \"apideck\": {\n      \"url\": \"https://mcp.apideck.dev/mcp\",\n      \"headers\": {\n        \"x-apideck-api-key\": \"YOUR_API_KEY\",\n        \"x-apideck-consumer-id\": \"YOUR_CONSUMER_ID\",\n        \"x-apideck-app-id\": \"YOUR_APP_ID\"\n      }\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eAny MCP client (manual JSON)\u003c/summary\u003e\n\n```json\n{\n  \"mcpServers\": {\n    \"apideck\": {\n      \"url\": \"https://mcp.apideck.dev/mcp\",\n      \"headers\": {\n        \"x-apideck-api-key\": \"YOUR_API_KEY\",\n        \"x-apideck-consumer-id\": \"YOUR_CONSUMER_ID\",\n        \"x-apideck-app-id\": \"YOUR_APP_ID\"\n      }\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n\n---\n\n## Claude Desktop (.mcpb plugin bundle)\n\nApideck ships a Claude plugin bundle (`.mcpb` — Anthropic's Model Context Protocol Bundle format). Drop it into Claude Desktop and you get the full server (330 endpoint tools + 4 workflow tools) with API key / consumer ID / app ID prompted via the standard plugin UI.\n\n```bash\npnpm mcpb:build       # → dist/mcp-server.mcpb (~590 KB)\n```\n\nThe bundle is built locally; CI publication to GitHub Releases is deferred. Open the `.mcpb` with Claude Desktop's plugin installer; Claude Desktop reads `manifest.json` to wire credentials and spawn the server.\n\n---\n\n## Tools\n\n**330 tools** across 10 unified APIs:\n\n| API | Tools | Coverage |\n|---|---|---|\n| Accounting | 143 | Invoices, bills, payments, suppliers, customers, journal entries, ledger accounts, purchase orders, tax rates, P\u0026L, balance sheet, and more |\n| CRM | 50 | Companies, contacts, leads, opportunities, pipelines, notes, activities, users |\n| File Storage | 32 | Files, folders, drives, shared links, upload sessions |\n| HRIS | 25 | Employees, companies, departments, payrolls, time-off requests |\n| Vault | 23 | Connections, consumers, sessions, custom mappings, logs |\n| ATS | 15 | Applicants, applications, jobs |\n| Issue Tracking | 15 | Collections, tickets, users, tags, comments |\n| Connector | 8 | APIs, connectors, resources, coverage metadata |\n| Ecommerce | 7 | Customers, orders, products, stores |\n| Webhook | 6 | Webhook subscriptions, logs |\n| Proxy | 6 | GET, POST, PUT, PATCH, DELETE, OPTIONS |\n\n### Workflow tools\n\nIntent-grouped workflows orchestrate multiple calls behind a single MCP tool — saving agents the round-trips and field-plumbing they routinely get wrong.\n\n| Tool | What it does | Calls |\n|---|---|---|\n| `apideck-month-end-close-check` | Fans out aged-creditors, aged-debtors, balance-sheet, and P\u0026L in parallel. Returns a partial result when some reports aren't supported by the connector. | 4 |\n\n---\n\n## Hosted\n\nThe server is live at:\n\n```\nhttps://mcp.apideck.dev/mcp\n```\n\nPass credentials via headers:\n\n| Header | Description |\n|---|---|\n| `x-apideck-api-key` | Your Apideck API key |\n| `x-apideck-consumer-id` | The end-user / customer ID in your app |\n| `x-apideck-app-id` | Your Apideck application ID |\n\n---\n\n## Three Modes\n\n| Mode | Tools exposed | Initial tokens | Best for |\n|---|---|---|---|\n| `dynamic` (default) | 4 meta-tools | ~1,300 | General-purpose agents, token-sensitive contexts |\n| `static` | All 330 tools | ~35–55K | Focused agents doing a specific API |\n| `code` | `apideck_search` + `apideck_run` | ~600 | Agents that call endpoints programmatically via JS |\n\n### Dynamic mode\n\nAgents discover tools progressively — **~85% fewer tokens** than loading all 330 schemas upfront:\n\n```\nlist_tools({})\n  → { total: 330, domains: [{ name: \"accounting\", count: 143 }, ...],\n      hint: \"Call list_tools(domain=X) or list_tools(search_terms=[...])\" }\n\nlist_tools({\"search_terms\": [\"invoices\"]})\n  → accounting-invoices-list, accounting-invoices-create, accounting-invoices-get, ...\n\ndescribe_tool_input({\"name\": \"accounting-invoices-list\"})\n  → Full JSON Schema with all parameters\n\nexecute_tool({\"name\": \"accounting-invoices-list\", \"input\": {\"request\": {\"limit\": 10}}})\n  → Invoice data from the connected accounting system\n```\n\nYou can combine dynamic mode with a scope filter:\n\n```json\n{\n  \"mcpServers\": {\n    \"apideck\": {\n      \"command\": \"node\",\n      \"args\": [\"dist/bin/mcp.js\", \"--mode\", \"dynamic\", \"--scope\", \"read\"],\n      \"env\": { \"APIDECK_API_KEY\": \"...\", \"APIDECK_CONSUMER_ID\": \"...\", \"APIDECK_APP_ID\": \"...\" }\n    }\n  }\n}\n```\n\n### Code mode\n\nCode mode exposes two tools instead of 330+. Designed for agents that prefer calling endpoints as methods rather than tool calls:\n\n1. **`apideck_search`** — find endpoints by substring, returns camelCase method names\n2. **`apideck_run`** — execute a JS script with `apideck.\u003cmethodName\u003e` bound to live endpoint dispatchers, sandboxed in `node:vm`\n\n```\napideck_search(\"invoices\")\n  → {\n      count: 4,\n      endpoints: [\n        { name: \"accounting-invoices-list\",   method: \"accountingInvoicesList\" },\n        { name: \"accounting-invoices-create\",  method: \"accountingInvoicesCreate\" },\n        { name: \"accounting-invoices-get\",     method: \"accountingInvoicesGet\" },\n        { name: \"accounting-invoices-delete\",  method: \"accountingInvoicesDelete\" }\n      ]\n    }\n\napideck_run({\n  script: \"return await apideck.accountingInvoicesList({ request: { limit: 5 } })\"\n})\n  → Invoice data from the connected accounting system\n```\n\nThe sandbox strips `process`, `require`, `fs`, `child_process`, and other Node globals — scripts only have access to the `apideck` object.\n\n---\n\n## Scopes\n\nFilter tools by HTTP method class:\n\n| Scope | HTTP methods | Flag |\n|---|---|---|\n| `read` | GET, HEAD | `--scope read` |\n| `write` | POST, PUT, PATCH | `--scope write` |\n| `destructive` | DELETE | `--scope destructive` |\n\n---\n\n## Connect from Any Agent Framework\n\n### Remote (hosted — no local install)\n\n```python\n# OpenAI Agents SDK\nfrom agents import Agent\nfrom agents.mcp import MCPServerHTTP\n\nagent = Agent(\n    name=\"Apideck Agent\",\n    mcp_servers=[MCPServerHTTP(\n        url=\"https://mcp.apideck.dev/mcp\",\n        headers={\n            \"x-apideck-api-key\": \"...\",\n            \"x-apideck-consumer-id\": \"...\",\n            \"x-apideck-app-id\": \"...\"\n        }\n    )]\n)\n```\n\n```python\n# Pydantic AI\nfrom pydantic_ai import Agent\nfrom pydantic_ai.mcp import MCPServerHTTP\n\nagent = Agent(\"anthropic:claude-sonnet-4-5\", mcp_servers=[\n    MCPServerHTTP(\n        url=\"https://mcp.apideck.dev/mcp\",\n        headers={\n            \"x-apideck-api-key\": \"...\",\n            \"x-apideck-consumer-id\": \"...\",\n            \"x-apideck-app-id\": \"...\"\n        }\n    )\n])\n```\n\n```python\n# LangChain / LangGraph\nfrom langchain_mcp_adapters.client import MultiServerMCPClient\n\nclient = MultiServerMCPClient({\n    \"apideck\": {\n        \"url\": \"https://mcp.apideck.dev/mcp\",\n        \"transport\": \"streamable_http\",\n        \"headers\": {\n            \"x-apideck-api-key\": \"...\",\n            \"x-apideck-consumer-id\": \"...\",\n            \"x-apideck-app-id\": \"...\"\n        }\n    }\n})\ntools = await client.get_tools()\n```\n\n### Local stdio (for development)\n\n```bash\npnpm install\npnpm build\n\n# Dynamic mode (default)\nAPIDECK_API_KEY=... APIDECK_CONSUMER_ID=... APIDECK_APP_ID=... node dist/bin/mcp.js start\n\n# Static mode (all 330 tools)\nAPIDECK_API_KEY=... node dist/bin/mcp.js start --mode static\n\n# Code mode\nAPIDECK_API_KEY=... node dist/bin/mcp.js start --mode code\n\n# Read-only\nAPIDECK_API_KEY=... node dist/bin/mcp.js start --scope read\n```\n\n```python\n# OpenAI Agents SDK (local stdio)\nfrom agents import Agent\nfrom agents.mcp import MCPServerStdio\n\nmcp = MCPServerStdio(name=\"apideck\", params={\n    \"command\": \"node\",\n    \"args\": [\"dist/bin/mcp.js\", \"start\", \"--mode\", \"dynamic\"],\n    \"env\": {\n        \"APIDECK_API_KEY\": \"...\",\n        \"APIDECK_CONSUMER_ID\": \"...\",\n        \"APIDECK_APP_ID\": \"...\"\n    }\n})\nagent = Agent(name=\"Apideck Agent\", mcp_servers=[mcp])\n```\n\n---\n\n## Reliability\n\nThe runtime automatically retries failed requests so transient errors don't surface to your agent:\n\n- **Retried status codes**: 408, 500, 502, 503, 504\n- **Retried network errors**: `ECONNRESET`, `ECONNREFUSED`, `ETIMEDOUT`, and similar\n- **Strategy**: exponential backoff, up to 4 attempts, capped at 30 s\n- **Idempotency**: retries only fire on GET, HEAD, PUT, DELETE, OPTIONS, TRACE — POST/PATCH are not retried automatically\n\n## Binary Content\n\nFile Storage endpoints that return images or audio send them as native MCP content blocks rather than base64 strings in JSON:\n\n```json\n{ \"type\": \"image\", \"data\": \"\u003cbase64\u003e\", \"mimeType\": \"image/png\" }\n{ \"type\": \"audio\", \"data\": \"\u003cbase64\u003e\", \"mimeType\": \"audio/mpeg\" }\n```\n\nAgents that support multi-modal MCP content (Claude, GPT-4o) receive the raw bytes — no extra decoding step needed.\n\n---\n\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapideck-libraries%2Fmcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapideck-libraries%2Fmcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapideck-libraries%2Fmcp/lists"}