原文(日本語に翻訳)
claude mcp serve のツール呼び出しが、outputSchema をバリデートするMCPクライアントで「Tool execution failed」で失敗する問題を修正しました。
原文(英語)
Fixed claude mcp serve tool calls failing with "Tool execution failed" in MCP clients that validate outputSchema
概要
claude mcp serve で提供されるツールを、outputSchema のバリデーションを行うMCPクライアントから呼び出した場合に、「Tool execution failed」エラーが発生していました。Claude Codeが提供するツールの outputSchema が、一部のMCPクライアントが期待する形式と一致していなかったことが原因です。このアップデートにより、互換性が改善されました。
基本的な使い方
bash
# Claude CodeをMCPサーバーとして起動
claude mcp serve
# 修正前: outputSchemaを検証するMCPクライアントからの呼び出しが失敗
# Error: Tool execution failed - outputSchema validation error
# 修正後: 正しいoutputSchemaが提供され、バリデーションが通る実践例
MCPサーバーとしてのClaude Code設定
bash
# Claude CodeをMCPサーバーとして起動する設定
# 起動コマンド
claude mcp serve --port 3000
# または設定ファイルで指定
cat ~/.claude/mcp-server.jsonjson
{
"server": {
"port": 3000,
"host": "localhost"
},
"tools": {
"expose": ["Read", "Write", "Edit", "Bash"]
}
}MCP対応クライアントからの接続
python
# Python MCPクライアントでClaude Codeのツールを使用
import asyncio
from mcp import Client
async def use_claude_tools():
async with Client("http://localhost:3000") as client:
# ツール一覧を取得(outputSchemaが含まれる)
tools = await client.list_tools()
for tool in tools:
print(f"Tool: {tool.name}")
print(f"Output Schema: {tool.output_schema}")
# 修正後: outputSchemaが正しい形式で返される
# ツールの実行
result = await client.call_tool("Read", {
"file_path": "/path/to/file.txt"
})
print(result)
asyncio.run(use_claude_tools())TypeScript MCPクライアントでの使用
typescript
// TypeScript MCPクライアント
import { MCPClient } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const client = new MCPClient();
async function connectToClaudeCode() {
const transport = new StdioClientTransport({
command: 'claude',
args: ['mcp', 'serve']
});
await client.connect(transport);
// ツール一覧を取得
const tools = await client.listTools();
console.log('Available tools:');
tools.tools.forEach(tool => {
console.log(`- ${tool.name}: ${tool.description}`);
// 修正後: outputSchemaが正しく含まれる
if (tool.outputSchema) {
console.log(` Output schema: ${JSON.stringify(tool.outputSchema)}`);
}
});
// Read ツールを呼び出し
const result = await client.callTool({
name: 'Read',
arguments: {
file_path: './README.md'
}
});
console.log('Result:', result);
}
connectToClaudeCode();outputSchemaのデバッグ
bash
# MCP Inspectorでツールのスキーマを確認
npx @modelcontextprotocol/inspector claude mcp serve
# curlでMCPエンドポイントを直接テスト
curl -X POST http://localhost:3000/tools \
-H "Content-Type: application/json" \
-d '{"method": "tools/list"}'
# outputSchemaが含まれるか確認
curl -X POST http://localhost:3000/tools \
-H "Content-Type: application/json" \
-d '{"method": "tools/list"}' | python3 -m json.tool | grep -A 20 "outputSchema"注意点
- この修正はMCPクライアント側で
outputSchemaのバリデーションを行う実装に影響します claude mcp serveで提供されるすべてのツールのoutputSchemaが修正されます- MCPプロトコルの仕様に準拠した形式でスキーマが提供されます
- 既存のMCPクライアント実装でバリデーションを行っていない場合は影響がありません
- MCP Inspector などのデバッグツールで修正されたスキーマを確認できます