連携サンプル
n8n・Make・自作スクリプトなど MCP を直接話せないツールから JSON-RPC で呼び出す設定例
n8n や Make のように MCP を直接話せないツールからは、HTTP で JSON-RPC を送る形で同じツールを呼び出せます。このページでは、その設定例をまとめています。
- MCP クライアント(Claude Desktop など)の設定 → MCPサーバのセットアップ
以下の <トークン> には、組織設定で発行した API トークンを入れてください。
呼び出しの基本
| 項目 | 値 |
|---|---|
| エンドポイント | POST https://api.thingsconnect.app/api/mcp |
| ヘッダ | Authorization: Bearer <トークン> |
Content-Type: application/json |
|
Accept: application/json, text/event-stream |
|
| ボディ | JSON-RPC 2.0(method は tools/list または tools/call) |
サーバはステートレスな Streamable HTTP 構成のため、セッションを張らずに単発の POST で完結します。GET / DELETE は 405 を返します。
ツール一覧を取得する
curl -X POST https://api.thingsconnect.app/api/mcp \
-H "Authorization: Bearer <トークン>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
ツールを呼び出す
curl -X POST https://api.thingsconnect.app/api/mcp \
-H "Authorization: Bearer <トークン>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_sensor_reading",
"arguments": { "device_id": "edge-device-01__c9b1d2e3-4a5b-6c7d-8e9f-0a1b2c3d4e5f" }
}
}'
レスポンスの読み方
レスポンスは JSON-RPC の形で返り、ツールの戻り値は result.content[0].text に JSON 文字列として入ります。
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "{\"device_id\":\"...\",\"value\":12.34,\"unit\":\"kg\"}" }]
}
}
n8n から使う
HTTP Request ノードで上記の JSON-RPC を送ります。
ワークフロー例(センサ値の監視 → Slack 通知)
{
"nodes": [
{
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "minutes", "minutesInterval": 5 }] }
}
},
{
"name": "Get Sensor Reading",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://api.thingsconnect.app/api/mcp",
"headerParameters": {
"parameters": [
{ "name": "Authorization", "value": "Bearer <トークン>" },
{ "name": "Accept", "value": "application/json, text/event-stream" }
]
},
"jsonBody": "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"get_sensor_reading\",\"arguments\":{\"device_id\":\"edge-device-01__c9b1d2e3-4a5b-6c7d-8e9f-0a1b2c3d4e5f\"}}}"
}
},
{
"name": "Slack Notify",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "#factory-alerts",
"text": "現在の重量: {{ JSON.parse($json.result.content[0].text).value }} kg"
}
}
]
}
result.content[0].text は JSON 文字列なので、後続で使う前にパースが必要です。
Make(旧 Integromat)から使う
HTTP モジュールから同じ JSON-RPC を送ります。
-
シナリオエディタで「HTTP > Make a request」モジュールを追加します。
-
以下のように設定します。
項目 値 URL https://api.thingsconnect.app/api/mcpMethod POSTHeaders Authorization: Bearer <トークン>/Accept: application/json, text/event-streamBody type RawContent type application/jsonRequest content {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_ai_events","arguments":{"ai_app_id":"license-plate","limit":20}}} -
「Parse JSON」モジュールで
result.content[0].textをパースし、後続モジュールで利用します。
監視シナリオの組み方
サーバ起点の通知は受け取れません(ステートレス構成のため)。定期実行して自前で判定する形にします。
- トリガー: スケジュール(5 分ごと)
- HTTP: 値を取るツールを呼び出す
- Parse JSON:
result.content[0].textをパース - Router: 条件に一致するルートと、しないルートに分岐
- Email / Slack: 一致 → 通知
自作スクリプトから使う
同じ JSON-RPC を送るだけです。センサ値を 5 分ごとに取得して閾値判定する例です。
#!/usr/bin/env bash
set -euo pipefail
ENDPOINT="https://api.thingsconnect.app/api/mcp"
TOKEN="<トークン>"
DEVICE_ID="edge-device-01__c9b1d2e3-4a5b-6c7d-8e9f-0a1b2c3d4e5f"
value=$(curl -sS -X POST "$ENDPOINT" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"get_sensor_reading\",\"arguments\":{\"device_id\":\"$DEVICE_ID\"}}}" \
| jq -r '.result.content[0].text' | jq -r '.value')
echo "現在値: $value"
利用できるツールの全一覧とパラメータは利用可能なMCPツール一覧にあります。