HTTP から直接呼び出す(ベータ)
はじめにお読みください
このページの内容はベータ扱いです。ここで説明しているのは MCP(Model Context Protocol)の通信内容そのもので、予告なく変更される場合があります。プロトコルの仕様変更や chiyo-co 側の実装変更にともない、リクエストの形式・ヘッダ・レスポンスの構造が変わることがあります。
継続的にご利用になる場合は、MCP 連携ガイドに記載の各クライアント(Claude Code / Cursor / VS Code / Gemini CLI)をお使いいただくことを推奨します。これらのクライアントは仕様変更に追随するため、お客様側での対応が不要です。
※このページの手順で不具合が生じた場合、クライアント経由での利用を優先してサポートいたします。
こんなときに
MCP クライアントを介さず、シェルスクリプトや CI から直接解析を投入したい場合の手順です。
- CI のパイプラインで、記事の公開前に自動でコピペチェックをかけたい
- 社内ツールから chiyo-co を呼び出したい
- MCP に対応していない環境から使いたい
API キーはMCP 接続の画面で発行したものをそのまま使えます。消費するカウントも画面から実行する場合と同じです。
通信の形式
エンドポイントは 1 つで、すべての操作を POST で送ります。
https://kagemusya.biz-samurai.com/mcp
本文は JSON-RPC 2.0 形式です。送るヘッダは次の 3 つです(必須は Authorization と Content-Type の 2 つ)。
| ヘッダ | 値 | 説明 |
|---|---|---|
Authorization |
Bearer <YOUR_API_KEY> |
発行した API キー |
Content-Type |
application/json |
本文の形式 |
Accept |
application/json, text/event-stream |
MCP の仕様で推奨される指定です。application/json と */* のどちらも含まない値を送ると 406 になります |
解析を投入する
もっとも短い例です。<YOUR_API_KEY> は発行したキーに置き換えてください。
curl -X POST https://kagemusya.biz-samurai.com/mcp \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "chiyoco_run_check",
"arguments": {
"text": "チェックしたい本文をここに入れます。この例文は空白と改行を除いて 51 文字以上になるように書いてあるので、そのまま実行して動作を確かめられます。",
"check_type": "kagemusha",
"idempotency_key": "ci-20260731-001",
"max_ticket_cost": 10
}
}
}'
成功すると次のような応答が返ります。
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"analytic_id": 671,
"status": "running",
"ticket_cost": 1,
"tickets_remaining": 967
},
"content": [{ "type": "text", "text": "{\"analytic_id\":671,...}" }]
}
}
引数の決まり
| 引数 | 決まり |
|---|---|
text |
空白と改行を除いて 51 文字以上、20,000 文字以内。50 文字ちょうどでは通りません |
idempotency_key |
半角英数字と - _ のみ、64 文字以内。日本語や空白を含むと invalid_input になります |
check_type |
kagemusha(影武者)など。使える値は tools/list で確認できます |
max_ticket_cost |
この解析で消費してよいカウントの上限。必須 |
応答の読み方
result.structuredContent に構造化されたデータが入ります。result.content[].text にも同じ内容が文字列で入っていますが、プログラムから読む場合は structuredContent をお使いください。
まず result.isError を見てください。これが true のときはエラーで、structuredContent は付きません。内容は result.content[0].text の JSON に error.code として入ります。
idempotency_key は再試行時の二重投入を防ぐためのものです。同じキーで再度送っても新しい解析は作られず、最初の解析 ID が返ります(カウントも消費しません)。ネットワークエラーで応答を受け取れなかったときに、そのまま同じリクエストを送り直せます。
max_ticket_cost は消費してよいカウントの上限です。超える場合は投入されず ticket_cost_exceeded が返るため、見積もりの確認にも使えます。
状態を確認する
解析は非同期で、数分から数十分かかります。chiyoco_get_status で確認します。
curl -X POST https://kagemusya.biz-samurai.com/mcp \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "chiyoco_get_status",
"arguments": { "analytic_id": 671 }
}
}'
status が succeeded になったら結果を取得できます。※確認の間隔は 30 秒以上を空けてください。
結果を取得する
curl -X POST https://kagemusya.biz-samurai.com/mcp \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "chiyoco_get_result",
"arguments": { "analytic_id": 671, "detail": "summary" }
}
}'
detail に summary を指定すると全体のスコアと上位のターゲットが返ります。一致した箇所の詳細が必要な場合は markers を指定してください(応答が大きくなるためページングされます)。
残りカウントを確認する
今月のカウントの付与数・消費数・残数は chiyoco_get_quota で取得できます。引数はありません。
curl -X POST https://kagemusya.biz-samurai.com/mcp \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "chiyoco_get_quota",
"arguments": {}
}
}'
次のような応答が返ります。
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"structuredContent": {
"plan_name": "スタンダードプラン",
"plan_tickets": 1000,
"tickets_granted": 1000,
"tickets_added": 0,
"tickets_consumed": 33,
"tickets_remaining": 967
},
"content": [{ "type": "text", "text": "{\"plan_name\":\"スタンダードプラン\",...}" }]
}
}
カウントは毎月 1 日にリセットされ、前月分は繰り越されません。※超過利用が可能な契約では tickets_remaining が負の値になることがあります。
使えるツールを調べる
利用できる操作の一覧と、それぞれの引数の形式は tools/list で取得できます。
curl -X POST https://kagemusya.biz-samurai.com/mcp \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":5,"method":"tools/list","params":{}}'
API キーに与えたスコープによって、返るツールが変わります。「解析結果の参照」のみを許可したキーでは chiyoco_run_check は含まれません。
エラーへの対処
| 状況 | 応答 | 対処 |
|---|---|---|
| キーが違う / 失効している | HTTP 401 | MCP 接続の画面でキーの状態をご確認ください |
短時間に呼びすぎた(tools/call) |
HTTP 200 + rate_limited |
details.retry_after の秒数だけ待ってから再送してください |
| 短時間に呼びすぎた(それ以外) | HTTP 429 + Retry-After |
Retry-After の秒数だけ待ってから再送してください |
| 引数が正しくない | invalid_input |
details.field に問題のある項目名が入ります |
| カウントの上限を超える | ticket_cost_exceeded |
details に必要なカウント数が入ります(今月の残数も、取得できた場合は入ります) |
| 同じキーで違う本文を送った | idempotency_conflict |
本文を変えるときは idempotency_key も新しくしてください |
| 同じキーの解析がまだ処理中 | in_progress |
少し待ってから同じ内容で送り直してください |
呼び出し回数の上限
1 分あたりユーザーごとに 30 回、API キーごとに 20 回までです。これとは別に、接続元ごとに 1 分あたり 60 回の上限があります。
上限の超え方によって応答の形が変わります。解析の投入や状態確認(tools/call)で超えた場合は HTTP 200 が返り、その中に rate_limited が入ります。HTTP のステータスだけを見ていると成功と区別できないのでご注意ください。
{
"jsonrpc": "2.0",
"id": 21,
"result": {
"content": [{
"type": "text",
"text": "{\"error\":{\"code\":\"rate_limited\",\"message\":\"...\",\"retryable\":true,\"details\":{\"retry_after\":31,\"scope\":\"key\"}}}"
}],
"isError": true
}
}
エラーのときは structuredContent が付きません。result.isError が true かどうかで判定し、内容は result.content[0].text の JSON を読んでください。details.scope にどの上限に当たったか(user / key / ip)が入ります。
tools/list のような tools/call 以外の呼び出しで超えた場合は HTTP 429 と Retry-After ヘッダが返ります。
再試行するときは
投入(chiyoco_run_check)を再試行する場合は、必ず同じ idempotency_key を使ってください。キーを変えると別の解析として扱われ、カウントを二重に消費します。