Twinkle HubTwinkle Hub
登入

📌 2026-08-17 新增:⚖️ 台灣法條時光機 — 歷史法條原文 · 修法沿革 · 全文檢索 · 條文關聯圖(935 個 dataset · 35,454+ 筆 row)

查看完整 Changelog →

Docs

10 分鐘​完成​接入

Twinkle Hub 是一個 MCP endpoint,​任何 MCP client 皆可接入。​以下​提供兩條路徑,請依您的角色​選擇。

取得 API key

/login → 使用 Google 或 GitHub 一鍵​登入。​首次​登入將自動​發放一支 virtual API key (sk-...)。​新帳號​預設​餘額為 0 — 自助​儲值功能即將​開放。

curl(streamable-http transport)

步驟 1:​initialize 以取得 session id(位於 response header 的 mcp-session-id)

text
curl -i -X POST https://api.twinkleai.tw/mcp/ \
  -H "Authorization: Bearer sk-..." \
  -H "Accept: application/json, text/event-stream" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'

步驟 2:​tools/call

text
curl -X POST https://api.twinkleai.tw/mcp/ \
  -H "Authorization: Bearer sk-..." \
  -H "Accept: application/json, text/event-stream" \
  -H "Content-Type: application/json" \
  -H "mcp-session-id: <from-step-1>" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"tw_list_domains","arguments":{}}}'

Response 採用 SSE-style framing——請​尋找以 data: 開頭的最後​一行,並解碼 JSON。

Python (fastmcp)

python
import asyncio
from fastmcp.client import Client
from fastmcp.client.auth import BearerAuth

async def main():
    async with Client(
        "https://api.twinkleai.tw/mcp/",
        auth=BearerAuth("sk-..."),
    ) as client:
        tools = await client.list_tools()
        print([t.name for t in tools])

        r = await client.call_tool(
            "tw_search_datasets",
            {"query": "AQI", "domain": "environment", "limit": 5},
        )
        # response 在 r.content[0].text — JSON string
        import json
        print(json.loads(r.content[0].text))

asyncio.run(main())

Tool 回傳 CallToolResult.content[0].text,內容為 JSON string。​licence、​citation 等 metadata 會​透過 _meta 欄位透傳。

Tools reference

ToolArguments回傳值(簡)
tw_list_domains[{key, name_zh, scope, typical_questions}]
tw_search_datasets{query, domain?, limit?}[{dataset_id, title, score, license}]
tw_get_dataset{dataset_id}{schema, columns, license, source_url}
tw_query_rows{dataset_id, where?, limit?}[row, ...]
tw_materialize_dataset{dataset_id, format?}全表 CSV / JSON

呼叫 tools/list 即可取得​所有 tool 的完整 schema,並自動生成 JSON Schema。

Authentication

  • Bearer token——header 設定為 Authorization: Bearer sk-...。這是 Twinkle Hub 發行的 virtual key,每位 user 專屬。​Key 請至 /dashboard 取得。
  • 無 OAuth flow——客戶端無​需 PKCE 或 refresh token,僅需一支 long-lived bearer。
  • Rate limit——Free 方案由滾動額度控管(每 5 小時 50 credits,​滾動​回補,另有每週 500 上限),​非 USD 預算​或 per-key RPM/TPM。

計費

即將​開放

核心工具現已免費——每 5 小時 50 credits,​滾動​回補​(另有每週 500 上限)。​免費​方案 query_rows 每次最多​回傳 10 筆。​深度​語意​搜尋與全文件取回保留給​即將​推出的 Pro;Pro 定價將於計費前公佈。

Free 方案:每 5 小時 50 credits,​滾動​回補​(另有每週 500 上限);​免費​方案 query_rows 每次最多​回傳 10 筆;​深度​語意​搜尋與全文件取回為 Pro 專屬。額度控管已生效(可能有輕微非​同步​延遲)。