MCP
Remote MCP server for Teak card operations
Teak provides a remote MCP server at https://teakvault.com/mcp.
For agents running inside the signed-in Teak web app, WebMCP offers read-only card tools with no extra authentication.
Base URLs
- Production:
https://teakvault.com/mcp - Local development:
http://localhost:3001/mcp - Discovery manifest:
https://teakvault.com/.well-known/mcp.json
Authentication
Teak’s MCP server supports two authentication methods.
Spec-compliant MCP clients discover Teak’s authorization server, open your browser to sign in, and store the resulting access token automatically. External clients show an approval screen with the requested access before Teak connects them. Access tokens are short-lived and refresh automatically.
For example, with Claude:
claude mcp add --transport http teak https://teakvault.com/mcpStart the MCP connection, then complete the browser sign-in when prompted.
You can revoke a connection at any time from Teak Settings → Security → Connections. Disconnecting an app revokes its access across all installations, including its refresh credentials. Every subsequent MCP request checks access again, even in an already-open client. API-key connections are managed under Security → API keys.
Connect Claude Code to Teak MCP with browser sign-in.
Add Teak as a remote HTTP MCP server, complete browser sign-in, and list my favorite cards.
Send a Teak API key in the Authorization header:
Authorization: Bearer teakapi_...Generate and manage API keys in Teak Settings. Each account can keep up to 10 active keys.
Transport
MCP Streamable HTTP at /mcp (a trailing slash also works), answered in stateless JSON mode. JSON-RPC batches are limited to 100 messages.
Available Tools
Core card tools
teak_v1_list_cards- Input:
{ limit?: number, cursor?: string, type?: string, favorited?: boolean, tag?: string, sort?: "newest" | "oldest", createdAfter?: number, createdBefore?: number } - Output:
{ items: Card[], pageInfo: { hasMore: boolean, nextCursor: string | null } }
- Input:
teak_v1_get_card- Input:
{ cardId: string } - Output: full card object
- Input:
teak_v1_create_card- Input: text/URL fields or uploaded-file fields
{ fileKey, fileEtag?, fileName, mimeType, fileSize?, cardType? }. Pass theETagresponse header from the upload PUT asfileEtagso Teak can verify the exact stored object. ExplicitcardType: "text"stores raw Markdown exactly; automatic URL, quote, and palette detection remains when the type is omitted. - Output:
{ status: "created", cardId: string, appUrl: string }
- Input: text/URL fields or uploaded-file fields
teak_v1_list_tags- Input:
{} - Output:
{ items: { name: string, count: number }[] }
- Input:
teak_v1_get_card_changes- Input:
{ since: number, cursor?: string, limit?: number } - Output:
{ items: Card[], deletedIds: string[], pageInfo: { hasMore: boolean, nextCursor: string | null } }
- Input:
teak_v1_bulk_cards- Input:
{ operation: "create" | "update" | "favorite" | "delete", items: object[], confirm?: true } - Output: bulk operation results; delete batches require
confirm: true
- Input:
teak_v1_create_upload- Input:
{ fileName: string, mimeType: string, fileSize: number } - Output:
{ uploadUrl: string, fileKey: string, method: "PUT", maxFileSize: number, expiresIn: number } - Supports the same upload matrix as the web app, API, and CLI.
.mdand.markdownfiles become editable text cards and must be valid UTF-8 no larger than 512 KiB; other supported files allow up to 100 MB.
- Input:
teak_v1_search_cards- Input:
{ q?: string, limit?: number } - Output:
{ items: Card[], total: number }
- Input:
teak_v1_list_favorite_cards- Input:
{ q?: string, limit?: number } - Output:
{ items: Card[], total: number }
- Input:
teak_v1_update_card- Input:
{ cardId: string, content?: string, url?: string, notes?: string | null, tags?: string[] } - Text-card content remains raw Markdown, preserved exactly, with a 512 KiB UTF-8 limit.
- Output: updated card object
- Input:
teak_v1_set_card_favorite- Input:
{ cardId: string, isFavorited: boolean } - Output: updated card object
- Input:
teak_v1_delete_card- Input:
{ cardId: string, confirm: true } - Output:
{ status: "deleted", cardId: string }
- Input:
ChatGPT connector tools
Teak also exposes the plain search and fetch tools expected by ChatGPT connectors and Deep Research:
searchaccepts{ query: string }and returns{ results: [{ id, title, url }] }.fetchaccepts{ id: string }and returns{ id, title, text, url, metadata }.
Error Format
Tool failures are returned as MCP tool errors with this structured shape:
{
"status": 429,
"code": "RATE_LIMITED",
"error": "Too many requests"
}