Invite-only.
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-adapters installed (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.

Related