SOLARI API & SDK

すべてのワークフローに ひとつの API。

CLI と MCP サーバーが実行する読み取り専用ツールのすべてを HTTP 呼び出し 1 回で — TypeScript・Python SDK ならメソッド呼び出し 1 回で。同じデータ、同じアクセストークン、やり取りは JSON。

LIVE · v1https://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-sdk
import { 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-sdk
from solari_sdk import Solari

solari = Solari()  # reads SOLARI_TOKEN
hits = solari.tools.catalog.instagram.account.search(query="nike", limit=3)

呼び出しは 6 つ。両言語で同じ形。

メソッド 1 つが上のエンドポイント 1 つに対応します。結果はツールの JSON そのままで、クライアント側ではキャッシュしません。

TSnew 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 を注入すればネットワークなしでテストできます。
TSawait solari.listTools()
PYsolari.list_tools()
GET /tools — このアカウントが呼べるすべてのツールと JSON 入力スキーマ。
TSawait solari.getTool(name)
PYsolari.get_tool(name)
GET /tools/{name} — ツール 1 つのスキーマと説明。
TSawait solari.call<T>(name, args)
PYsolari.call(name, arguments=None, **kwargs)
POST /tools/{name} — フルネームでツールを実行。TypeScript では結果の型を指定できます。
TSawait solari.tools.catalog.instagram.account.search(args)
PYsolari.tools.catalog.instagram.account.search(**kwargs)
同じ呼び出しをドット区切りのパスで。ツールレジストリから生成されるため、パス・引数名・enum 値は TypeScript と Python(pyright/mypy)の型検査対象です。
TSawait 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 でつなぐ