paperclip-mcp
Schema-driven MCP server that exposes all Paperclip API operations as typed MCP tools over stdio or Streamable HTTP, supporting both authenticated and local_mode deployments.
README
Paperclip MCP
Complete, schema-driven Model Context Protocol access to the Paperclip API.
Paperclip MCP turns the supplied paperclip-openapi.json contract into typed MCP tools
without maintaining a second, drifting interface registry. It exposes all 590 documented
operations over stdio or authenticated Streamable HTTP, handles Paperclip deployments both
with bearer authentication and in tokenless local_mode, and preserves the path, query,
body, and authorization boundaries described by the source document.
What it provides
- One direct, schema-validated
pc_*MCP tool for every OpenAPI method/path operation. - Bounded
paperclip_list_operationsdiscovery andpaperclip_call_operationdispatch by stableMETHOD /path/{template}keys. - Correct OpenAPI 3.0 nullable and exclusive-bound translation, path escaping, and query array serialization.
- JSON, text, JSONL, SSE transcript, and base64 binary responses behind one result envelope.
- Separate inbound MCP and outbound Paperclip bearer credentials; inbound credentials are never forwarded upstream.
- Optional upstream authentication: omit the Paperclip token for
local_mode, or configure a board/agent bearer token when Paperclip requires authentication. - Loopback-bound, non-root, read-only, capability-free Docker deployment with secret mounts, health/readiness probes, and resource limits.
Architecture
flowchart LR
Client[MCP client] -->|stdio or HTTP Bearer A| Gateway[Paperclip MCP]
Spec[paperclip-openapi.json] -->|590 validated operations| Gateway
Gateway -->|No auth in local_mode| Local[Paperclip local_mode]
Gateway -->|Bearer B when configured| Auth[Authenticated Paperclip]
Bearer A protects this service's HTTP endpoint. Bearer B belongs to Paperclip. They must be different, and neither is accepted as MCP tool input.
Quick start
Python 3.12 is required.
scripts/bootstrap.sh
export PAPERCLIP_BASE_URL=http://127.0.0.1:3100
For Paperclip local_mode, do not set PAPERCLIP_API_TOKEN:
.venv/bin/paperclip-mcp stdio
For a Paperclip instance that requires board or agent authentication:
export PAPERCLIP_API_TOKEN='paperclip-issued-token'
.venv/bin/paperclip-mcp stdio
The credential type determines which board-only, instance-admin, or agent-capable operations Paperclip will authorize. The MCP does not elevate upstream permissions.
Streamable HTTP
Create a gateway-only token and start the service:
.venv/bin/paperclip-mcp token --output secrets/mcp_token
export PAPERCLIP_MCP_TOKEN_FILE="$PWD/secrets/mcp_token"
.venv/bin/paperclip-mcp http
Connect an MCP client to http://127.0.0.1:8000/mcp with:
Authorization: Bearer <contents of secrets/mcp_token>
GET /healthz checks only the gateway. GET /readyz performs the public Paperclip health
request and therefore works in both upstream authentication modes. On loopback, the inbound
MCP token may be omitted for local development. Non-loopback binds fail closed unless it is
configured.
Docker
Generate the inbound token file:
.venv/bin/paperclip-mcp token --output secrets/mcp_token
export PAPERCLIP_BASE_URL=http://host.docker.internal:3100
docker compose up --build -d
That starts against Paperclip local_mode with no upstream authorization header. For an
authenticated Paperclip deployment, add the secret-only overlay:
install -m 600 /secure/path/paperclip-api-token secrets/paperclip_api_token
docker compose -f compose.yaml -f compose.auth.yaml up --build -d
The host port stays on 127.0.0.1. If Paperclip is another Compose service, place both on an
appropriate user-defined network and set PAPERCLIP_BASE_URL to its service URL; do not use
127.0.0.1 inside this container to refer to the host.
Tool input and output
Direct tools group URL values so names cannot collide:
{
"path": {"companyId": "company-123"},
"query": {"limit": 25},
"body": {"title": "Example"}
}
The source contract currently omits request schemas for three upload routes. Their tools provide a marked compatibility input:
{
"path": {"companyId": "company-123"},
"multipart": {
"file": {
"filename": "diagram.png",
"media_type": "image/png",
"data_base64": "iVBORw0KGgo..."
}
}
}
Success results use {status_code, content_type, headers, body, encoding}. Non-success
responses become MCP tool errors. See the
generated reference and
MCP client guide.
Documentation
- Architecture and contract generation
- MCP client configuration
- Operations and credential rotation
- Security model
- Testing and evidence boundaries
- Generated tool reference
Development
scripts/ci-bootstrap.sh
scripts/validate.sh
Validation checks formatting, lint, strict typing, compilation, the full test suite with branch coverage, generated documentation, distributions, and both Compose modes. Live Paperclip acceptance and built-container security checks are separate operator-run gates; mocked upstream tests do not constitute live service evidence.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。