Openrouter Admin

io.github.oviron由 GitHub 账号 oviron 发布v0.7.3更新于 Oct 24, 2026

MCP server for OpenRouter management API: credits, key CRUD, activity drill-down, dashboard.

概览

AI 生成的概览

一个 MCP 服务器,让助手查看并在启用后管理 OpenRouter 账户:额度、推理密钥、护栏、用量与模型价格。

可以做什么
读取账户额度、当前 Provisioning 密钥以及所有推理密钥的限额与到期时间,并提供额度、活跃密钥和当日按模型消耗的一站式概览。按日期、密钥或用户筛选最近 30 天用量,并按模型、日期、提供商或密钥聚合,还可按生成 id 查询单次调用。浏览模型目录、单个模型详情、各提供商端点及其价格与可用率,以及符合 ZDR 的端点。列出护栏及其详情、密钥与成员绑定关系,并列出组织成员。启用写入工具后,可创建、更新和删除推理密钥与护栏,并批量绑定或解绑护栏到密钥和成员。
适用场景
适合在聊天客户端中查看 OpenRouter 花费、定位哪些密钥或模型消耗了额度、比较模型价格与端点,或管理密钥和消费护栏,而不必打开网页控制台。
运行要求
通过 npx 或全局 npm 安装以 stdio 在本地运行,需要 Node.js。需要 OpenRouter Provisioning API 密钥,放在环境变量 OPENROUTER_PROVISIONING_KEY 中;该密钥不同于推理密钥。写入工具还需将 OPENROUTER_ADMIN_ALLOW_WRITE 设为 1。需要通过网络以 HTTPS 访问 OpenRouter API。
安装前请注意
Provisioning 密钥可管理整个账户,应视为敏感信息;它只会发送给 OpenRouter API。写入工具默认关闭,以防提示注入导致的密钥变更;启用后可创建、修改并永久删除密钥和护栏,新建密钥的密钥值只显示一次且之后无法取回。服务器返回原始字段,不会标记异常。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Openrouter Admin,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

openrouter-admin-mcp

[npm version] [npm downloads] [CI] [MCP Registry] [Node] [License: MIT]

MCP server for the OpenRouter management API — programmatic control of credits, inference keys, guardrails, organization members, and usage analytics from inside Claude Code, Claude Desktop, Cursor, or any MCP-compatible client.

[demo]

Read-only by default. Destructive write operations are gated behind an opt-in env flag.

This is not an inference proxy. It uses an OpenRouter Provisioning API key, which can manage your account but cannot make completion calls.

Why

OpenRouter's UI is solid for one-off tweaks, but checking spend across keys, drilling into per-model/per-day usage, configuring account-wide guardrails, or rotating limits requires a lot of clicking. This server exposes those operations as MCP tools — Claude can answer "what burned my credits this week?", "create a temporary key with a $0.30 daily cap", or "bind the new prod key to our daily-$50 guardrail" in a single turn.

Features

26 tools wrapping the OpenRouter management API:

  • or_overview — one-shot dashboard: credits + active keys (with reset/expiration) + today's UTC burn by model.
  • Inference key CRUD including limit_reset (daily/weekly/monthly) and expires_at.
  • Guardrails CRUD — account-wide spending limits with provider/model allowlists, ZDR enforcement. Bulk-assign to keys or org members.
  • Activity drill-down — aggregate by_model, by_day, by_provider, or by_key. Token-level breakdown (prompt / completion / reasoning) per row.
  • Generation lookup — fetch any single inference call by gen-… id (cost, tokens, latency, finish reason).
  • Model & endpoint discovery — current pricing per 1M tokens, per-provider uptime, ZDR-compliant endpoints.

Plumbing: HTTP retry on 429/5xx with Retry-After support, in-session GET cache, write invalidation. Returns raw fields — interpretation is left to the agent.

Install

One-click

[Install in VS Code] [Install in Cursor]

Replace the placeholder sk-or-v1-... with your real key after install.

Manual

Run via npx (no install needed) or install globally:

bash
npx -y openrouter-admin-mcp# ornpm install -g openrouter-admin-mcp

Configuration

Create a Provisioning key at https://openrouter.ai/settings/provisioning, then add the server to your MCP client config.

Claude Code (~/.claude.json) or Claude Desktop (claude_desktop_config.json):

json
{  "mcpServers": {    "openrouter-admin": {      "command": "npx",      "args": ["-y", "openrouter-admin-mcp"],      "env": {        "OPENROUTER_PROVISIONING_KEY": "sk-or-v1-..."      }    }  }}

Restart your client to load the server. By default this gives read-only access — to enable key creation, mutation, and deletion, see Enabling write tools below.

Enabling write tools

Destructive operations (or_key_create, or_key_update, or_key_delete) are disabled by default to prevent accidental key mutation through prompt-injected tool calls. Add OPENROUTER_ADMIN_ALLOW_WRITE to your env block to enable them:

json
"env": {  "OPENROUTER_PROVISIONING_KEY": "sk-or-v1-...",  "OPENROUTER_ADMIN_ALLOW_WRITE": "1"}

The server logs which mode it started in:

openrouter-admin-mcp running on stdio (write tools: ENABLED)

Read tools (or_overview, or_credits, or_current_key, or_keys_list, or_key_get, or_activity) are always available regardless of this flag.

Tools

Read (always available)

ToolPurpose
or_overviewOne-shot dashboard: credits + active keys + today's burn by model.
or_creditsAccount balance: total purchased, total used, remaining.
or_current_keyMetadata of the Provisioning key the server is using.
or_keys_listAll inference keys with usage, limits, reset cadence, expiration.
or_key_getDetailed view of one key by hash.
or_activityUsage for the last 30 UTC days. Filters: date, api_key_hash, user_id. Aggregations: none, by_model, by_day, by_provider, by_key.
or_generationFetch a single inference call by its gen-… id (cost, tokens, latency, finish reason).
or_modelsModel catalog with per-1M pricing, context length, modalities. Filterable.
or_model_getFull details for one model id.
or_model_endpointsPer-provider endpoints for a model: pricing, uptime, status.
or_models_userModels filtered by your account's privacy/guardrail settings.
or_zdr_endpointsZDR-compliant endpoints for privacy-constrained workflows.
or_guardrails_listAll guardrails: limit_usd, reset, allow/block lists, ZDR.
or_guardrail_getFull details for one guardrail.
or_guardrails_assignmentsComposite — which keys/members are bound to which guardrail.
or_org_membersMembers of the OpenRouter organization (Management-key + org account).

Write (opt-in via OPENROUTER_ADMIN_ALLOW_WRITE=1)

ToolPurpose
or_key_createCreate a new inference key. Returns the one-time secret.
or_key_updateUpdate name / disabled / limit / limit_reset / expires_at.
or_key_deletePermanently delete a key.
or_guardrail_createCreate a guardrail.
or_guardrail_updateUpdate a guardrail.
or_guardrail_deleteDelete a guardrail.
or_guardrail_assign_keys / _unassign_keysBulk-(un)assign a guardrail to inference keys.
or_guardrail_assign_members / _unassign_membersBulk-(un)assign a guardrail to org members.

Example — create a daily-capped temporary key

> Create a key called "scratch" with a $0.50 daily limit that expires in 30 days.
[Claude calls or_key_create with:  name="scratch",  limit=0.50,  limit_reset="daily",  expires_at="2026-05-25T00:00:00Z"]
Created key **scratch**Hash: f7a3...Limit: $0.5 (resets daily)Expires: 2026-05-25T00:00:00Z
Secret: `sk-or-v1-...`⚠️ This secret cannot be retrieved later — store it now.

Example — diagnose a cost spike

> Why did my OpenRouter spend jump yesterday?
[Claude calls or_activity with date="2026-04-24", aggregate="by_model"]
Activity: 47 rows | total $0.8570 | 305 reqBy model (top 5):- xiaomi/mimo-v2-flash      $0.5240 | 178 req | 24 rows- anthropic/claude-haiku-4.5 $0.2105 | 39 req  | 5 rows- ...

Example — bind a key to an account-wide guardrail

> Cap our prod-bot key at the daily-$50 guardrail.
[Claude calls or_guardrails_list, finds gr_prod_daily_50, then or_guardrail_assign_keys with id="gr_prod_daily_50", hashes=["…"]]
Assigned guardrail `gr_prod_daily_50` to 1 key(s).

Design

The server returns raw API fields. It does not flag what's "near limit", what's an "anomaly", or what the agent should do — that's the agent's job. Composite tools (or_overview, or_guardrails_assignments) merge multiple endpoints into one workflow response, but they don't interpret. Rationale: production MCP servers (Stripe, GitHub, Linear) follow the same pattern.

Data handling

  • The Provisioning key is read from the OPENROUTER_PROVISIONING_KEY environment variable and forwarded only to https://openrouter.ai/api/v1/* over HTTPS.
  • The server is stateless across restarts. An in-session GET cache (60s TTL on /credits, /key, /keys, /keys/{hash}) is held in memory only and dropped on shutdown.
  • The key never appears in error messages or tool output (verified by tests).

Development

bash
git clone https://github.com/oviron/openrouter-admin-mcp.gitcd openrouter-admin-mcpnpm installnpm run build      # compile TypeScript + chmod +x build/index.jsnpm test           # vitest, 84 unit tests, mocked fetch

Project layout:

src/  client.ts            # OpenRouterClient — fetch wrapper, retry, in-session cache  index.ts             # MCP server entry — registers tool groups  tools/    credits.ts         # or_credits, or_current_key    keys.ts            # or_keys_list, _get, _create, _update, _delete    activity.ts        # or_activity (5 modes incl. by_key)    overview.ts        # or_overview composite    generation.ts      # or_generation    models.ts          # or_models, _model_get, _model_endpoints, _models_user, _zdr_endpoints    guardrails.ts      # or_guardrails_list/_get/CRUD/bulk-assign + composite assignments    organization.ts    # or_org_memberstest/  client.test.ts, credits.test.ts, keys.test.ts,  activity.test.ts, overview.test.ts, generation.test.ts,  models.test.ts, guardrails.test.ts, organization.test.ts,  registration.test.ts, helpers.ts, smoke.test.ts

License

MIT — see LICENSE.

来源:README.md,提交 66e660a

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.7.3最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分