SOLARI API & SDK
すべてのワークフローに ひとつの API。
CLI と MCP サーバーが実行する読み取り専用ツールのすべてを HTTP 呼び出し 1 回で — TypeScript・Python SDK ならメソッド呼び出し 1 回で。同じデータ、同じアクセストークン、やり取りは JSON。
https://solari.sh/mcp/api/v1認証
CLI が発行する bearer トークンひとつ。
solari CLI で一度サインインし、そのアクセストークンをコードが動く場所に渡してください。
- solari auth token
- サインイン中のアカウントのアクセストークンを出力します。期限切れなら先に更新。8 時間有効。
- SOLARI_TOKEN
- SDK と CLI がこの変数を読むので、CI やコンテナは個別のサインインが不要です。
すべてのリクエストに Authorization: Bearer <token> を付けて送ります。
エンドポイント
エンドポイントは 4 つ。あとはツールが担います。
ツール名・引数・結果は solari help all --json と MCP サーバーの説明そのままです。
- GET/tools
- このアカウントが呼べるすべてのツールと JSON 入力スキーマ。
- GET/tools/{name}
- ツール 1 つのスキーマと説明。
- POST/tools/{name}
- ツールを実行。JSON ボディが引数、レスポンスが結果です。
- GET/me
- トークンの持ち主のアカウント。
例
ブランドを 1 回の呼び出しで解決。
レスポンスは CLI が --json で出すものと同じ。found と、最適順に並んだ items。
curl -sS https://solari.sh/mcp/api/v1/tools/solari_catalog_instagram_account_search \
-H "Authorization: Bearer $(solari auth token)" \
-H "Content-Type: application/json" \
-d '{"query":"nike","limit":3}'SDK
HTTP の代わりにクライアントで。
どちらもこのエンドポイントを薄く包んだ依存関係なしのライブラリです。ドット区切りのパスがツール名になります: catalog.instagram.account.search は solari_catalog_instagram_account_search。
TypeScript · Node、Bun、Deno、Workers、ブラウザ
npm install @brandazine/solari-sdkimport { Solari } from "@brandazine/solari-sdk";
const solari = new Solari({ token: process.env.SOLARI_TOKEN });
const hits = await solari.tools.catalog.instagram.account.search({ query: "nike", limit: 3 });Python 3.9+ · 標準ライブラリのみ
pip install solari-sdkfrom solari_sdk import Solari
solari = Solari() # reads SOLARI_TOKEN
hits = solari.tools.catalog.instagram.account.search(query="nike", limit=3)呼び出しは 6 つ。両言語で同じ形。
メソッド 1 つが上のエンドポイント 1 つに対応します。結果はツールの JSON そのままで、クライアント側ではキャッシュしません。
- TS
new Solari({ token?, baseUrl?, fetch?, timeoutMs?, userAgent? })PYSolari(token=None, base_url=…, timeout=150, user_agent=None, transport=None) - クライアントを作成。token がなければ SOLARI_TOKEN を読み、baseUrl の既定は solari.sh。fetch や transport を注入すればネットワークなしでテストできます。
- TS
await solari.listTools()PYsolari.list_tools() - GET /tools — このアカウントが呼べるすべてのツールと JSON 入力スキーマ。
- TS
await solari.getTool(name)PYsolari.get_tool(name) - GET /tools/{name} — ツール 1 つのスキーマと説明。
- TS
await solari.call<T>(name, args)PYsolari.call(name, arguments=None, **kwargs) - POST /tools/{name} — フルネームでツールを実行。TypeScript では結果の型を指定できます。
- TS
await solari.tools.catalog.instagram.account.search(args)PYsolari.tools.catalog.instagram.account.search(**kwargs) - 同じ呼び出しをドット区切りのパスで。ツールレジストリから生成されるため、パス・引数名・enum 値は TypeScript と Python(pyright/mypy)の型検査対象です。
- TS
await solari.me()PYsolari.me() - GET /me — トークンの持ち主のアカウント。
エラー型ひとつにエンベロープをそのまま。
2xx 以外は SolariError が API の status・code・message・tool を持って送出されます。429・502・503・504 は retryable が true で、サーバーが送った Retry-After 秒も含まれます。ネットワーク失敗は同じ型で status 0。
import { Solari, SolariError } from "@brandazine/solari-sdk";
try {
await solari.call("solari_insight_instagram_brand_overview", { username: "nike" });
} catch (error) {
if (error instanceof SolariError && error.retryable) {
// error.status, error.code, error.tool, error.retryAfterSeconds
}
}from solari_sdk import Solari, SolariError
try:
solari.call("solari_insight_instagram_brand_overview", username="nike")
except SolariError as error:
if error.retryable:
... # error.status, error.code, error.tool, error.retry_after_secondsエラー
失敗はすべて JSON エンベロープで。
2xx 以外は error.code、error.message、ツールが関わる場合は error.tool を返します。レート制限とアプリ起動中には Retry-After ヘッダーが付きます。
{
"error": {
"code": "invalid_arguments",
"message": "limit: expected number, received string",
"tool": "solari_catalog_instagram_account_search"
}
}- 400invalid_arguments
- ボディがツールの入力スキーマと一致しません。メッセージに問題のフィールドが書かれています。
- 400invalid_json
- ボディが JSON オブジェクトではありません。
- 400tool_error
- ツールが呼び出しを拒否しました。例: アカウント参照がない。
- 401unauthorized
- トークンがない、期限切れ、または失効しています。新しく発行してください。
- 403forbidden
- この SOLARI アカウントでは使えないツールです。
- 404tool_not_found
- このアカウントにその名前のツールはありません。まず一覧を確認してください。
- 429rate_limited
- 呼び出しが多すぎます。Retry-After 秒だけ待ってください。
- 502upstream_error
- SOLARI が呼び出しを完了できませんでした。しばらくして再試行してください。
- 503app_warming_up
- Studio アプリが起動中です。Retry-After 秒後に再試行してください。
- 504upstream_timeout
- 呼び出しが制限時間を超えました。範囲を狭めるか再試行してください。
さらに
同じツールを MCP でも。
エージェントと MCP ホストは同じトークンで MCP サーバーにつながります。呼び出し側に合う方を使ってください。
https://solari.sh/mcpMCP でつなぐ →