MCP
Remote MCP server for Teak card operations
Teak provides a remote MCP server at https://teakvault.com/mcp.
Base URLs
- Production:
https://teakvault.com/mcp - Local development:
http://docs.teak.localhost:1355/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. 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.
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_secret_live_a1b2c3d4_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGenerate and manage API keys in Teak Settings. Unauthenticated requests receive 401 with discovery metadata that compatible clients use to begin browser sign-in.
Transport
Protocolstring
MCP Streamable HTTP
stringEndpoint pathstring
/mcp (also /mcp/)
stringServer modestring
Stateless JSON response mode
stringOAuth protected-resource discovery advertises the canonical production endpoint shown above, so MCP clients validate and connect to the same public resource.
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"
}
JSON-RPC Examples
Initialize a connection
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": {
"name": "my-client",
"version": "1.0.0"
}
}
}List available tools
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}Create a card
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "teak_v1_create_card",
"arguments": {
"content": "https://teakvault.com"
}
}
}