カスタム MCP クライアントを構築
MCP SDK を使用して独自のアプリケーションから Synapse MCP サーバーに接続。
カスタム MCP クライアントを構築
独自の LLM アプリケーションを構築している場合、公式 MCP SDK を使用して Synapse MCP サーバーに直接接続できます。これにより、アプリは 79 個すべての Synapse ツールにアクセスできます。
SDK
| 言語 | パッケージ |
|---|---|
| TypeScript/JavaScript | @modelcontextprotocol/sdk |
| Python | mcp |
TypeScript の例
インストール
npm install @modelcontextprotocol/sdkstdio で接続
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const transport = new StdioClientTransport({
command: "npx",
args: ["-y", "synapse-mcp-api@latest"],
env: {
SYNAPSE_MIND_KEY: process.env.SYNAPSE_MIND_KEY!,
SYNAPSE_URL: "https://synapse.schaefer.zone",
},
});
const client = new Client(
{ name: "my-app", version: "1.0.0" },
{ capabilities: {} }
);
await client.connect(transport);
// List all available tools
const { tools } = await client.listTools();
console.log(`Available tools: ${tools.length}`);
for (const tool of tools) {
console.log(`- ${tool.name}: ${tool.description}`);
}
// Call a tool
const result = await client.callTool({
name: "memory_recall",
arguments: {},
});
console.log(result.content);
// Store a memory
await client.callTool({
name: "memory_store",
arguments: {
category: "fact",
key: "custom_client_test",
content: "Built a custom MCP client",
tags: ["test", "mcp"],
priority: "normal",
},
});
await client.close();HTTP/SSE で接続(リモート)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
const transport = new SSEClientTransport(
new URL("https://synapse-mcp.schaefer.zone/sse"),
{
requestInit: {
headers: {
Authorization: `Bearer ${process.env.SYNAPSE_MIND_KEY}`,
},
},
}
);
const client = new Client(
{ name: "my-app", version: "1.0.0" },
{ capabilities: {} }
);
await client.connect(transport);
// ... use as abovePython の例
インストール
pip install mcpstdio で接続
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
server_params = StdioServerParameters(
command="npx",
args=["-y", "synapse-mcp-api@latest"],
env={
"SYNAPSE_MIND_KEY": "mk_YOUR_KEY",
"SYNAPSE_URL": "https://synapse.schaefer.zone",
},
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# List tools
tools = await session.list_tools()
print(f"Available tools: {len(tools.tools)}")
# Call a tool
result = await session.call_tool("memory_recall", {})
print(result.content)
# Store a memory
await session.call_tool("memory_store", {
"category": "fact",
"key": "python_client_test",
"content": "Built a Python MCP client",
"tags": ["test", "mcp", "python"],
"priority": "normal",
})ツールプロファイル
接続時に、Mcp-Tool-Profile ヘッダー(HTTP/SSE)または MCP_PROFILE 環境変数(stdio)で特定のツールプロファイルを要求できます:
// stdio: set env var
env: {
SYNAPSE_MIND_KEY: "mk_...",
MCP_PROFILE: "minimal", // 8 tools instead of 119
}
// HTTP/SSE: set header
requestInit: {
headers: {
Authorization: "Bearer mk_...",
"Mcp-Tool-Profile": "minimal",
},
}エラー処理
try {
const result = await client.callTool({ name: "memory_recall", arguments: {} });
if (result.isError) {
console.error("Tool error:", result.content);
} else {
console.log("Success:", result.content);
}
} catch (err) {
console.error("MCP error:", err);
}ユースケース
- カスタム AI アシスタント — 永続的メモリを持つ独自エージェントを構築
- ワークフロー自動化 — カスタムワークフローで Synapse ツールをチェーン
- データパイプライン — メモリを抽出、変換、他の場所にロード
- 監視ダッシュボード — メモリ統計、チャット履歴、タスクを表示