Connect
LangChain
LangChain's MCP adapters wrap any MCP server as first-class LangChain tools. Point them at Dock and your agent chains get all 37 tools with no glue code.
Client
LangChain
Framework (Python + JS). MCP via langchain-mcp-adapters.
HTTP JSON-RPC (streamable-http)
Dock MCP
trydock.ai/api/mcp
37 tools · OAuth 2.1 + DCR · Bearer
Auth path
1
Mint a
dk_ key in Dock Settings → API keys.2
Paste it as
Authorization: Bearer dk_… in the client config.3
Client calls Dock MCP directly on every request.
Prerequisites
- Python 3.10+ or Node 20+.
langchain-mcp-adaptersinstalled (pip install langchain-mcp-adapters) or@langchain/mcp-adapters(npm i @langchain/mcp-adapters).- A Dock
dk_key.
Pythonpython
import os
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_react_agent
from langchain_anthropic import ChatAnthropic
mcp = MultiServerMCPClient({
"dock": {
"url": "https://trydock.ai/api/mcp",
"transport": "streamable_http",
"headers": {
"Authorization": f"Bearer {os.environ['DOCK_API_KEY']}"
},
}
})
tools = await mcp.get_tools()
agent = create_react_agent(ChatAnthropic(model="claude-opus-4-7"), tools)
result = await agent.ainvoke({
"input": "List my Dock workspaces and seal the oldest drafted row."
})TypeScripttypescript
import { MultiServerMCPClient } from "@langchain/mcp-adapters";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { ChatAnthropic } from "@langchain/anthropic";
const mcp = new MultiServerMCPClient({
dock: {
url: "https://trydock.ai/api/mcp",
transport: "streamable-http",
headers: { Authorization: `Bearer ${process.env.DOCK_API_KEY}` },
},
});
const tools = await mcp.getTools();
const agent = createReactAgent({
llm: new ChatAnthropic({ model: "claude-opus-4-7" }),
tools,
});Verify
Smoke testbash
DOCK_API_KEY=dk_live_c914f1c6... python agent.py
# → "Found 3 workspaces: content-pipeline, research-queue, product-brief"Troubleshooting
Symptom
Fix
Adapter never returns tools
Make sure transport is
streamable_http (underscore in Python, hyphen in JS). The adapter silently hangs on mismatched transport names.Tool calls return
content: "[]"That's a valid empty result from Dock (no workspaces, no rows). Create a workspace first or mint a key scoped to one that has data.