Hubris MCP vs Portkey Admin MCP

A side-by-side look at the Hubris MCP and Portkey Admin MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Hubris MCP logoHubris MCPConversational AI · Local subprocess (stdio)OpenAI-compatible LLM gateway for Russia, billed in rubles — catalog, balance, chat via MCP.59GoodAuth: api key requiredPortkey Admin MCP logoPortkey Admin MCPConversational AI · Local subprocess (stdio)Full Portkey Admin API MCP server — configs, prompts, keys, analytics, and more.65GreatAuth: api key required

Verdict: choose Hubris MCP for conversational ai work as a local process; choose Portkey Admin MCP for conversational ai as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Hubris MCP logoChoose Hubris MCP when

  • You need dedicated capabilities in the Conversational AI domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: API key required.
  • You have the keys it needs: HUBRIS_API_KEY, HUBRIS_MCP_URL.
  • You want tools like models_list, models_search, models_get_pricing.
Explore Hubris MCP

Portkey Admin MCP logoChoose Portkey Admin MCP when

  • You need dedicated capabilities in the Conversational AI domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: API key required.
  • You have the keys it needs: PORTKEY_API_KEY.
  • You want tools like list_all_users, invite_user, get_user_stats.
Explore Portkey Admin MCP

Feature & specification comparison

Rows where the two servers differ are marked.

SpecHubris MCP logoHubris MCPPortkey Admin MCP logoPortkey Admin MCP
CategoryConversational AIConversational AI
Quality signal59/100 · Good65/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthAPI key requiredAPI key required
PricingNot declaredBYOK (pay the provider)
Required env varsHUBRIS_API_KEYHUBRIS_MCP_URLPORTKEY_API_KEY
Verified ownerCommunity listingCommunity listing
GitHub stars06
Directory activity 1 views 0 installs 0 upvotes 2 views 0 installs 0 upvotes
Tools15184

Tools & capabilities

Hubris MCP tools 15

  • models_listWalk the whole Hubris catalogue page by page, ordered by model id. Returns every active model with its capabilities, context window and ruble price. Use this when you need the complete catalogue — to cache it, to count models, or to scan for something no filter covers. When you are looking for a model that fits a task, use models_search instead: it filters by capability, price and context server-side and saves you a few hundred rows. Paging: read `nextCursor` from the response and pass it back as `cursor`. When `nextCursor` is absent you have reached the end. The catalogue holds roughly 550 models, so a full walk is about 11 calls at the default page size.
  • models_searchFind models that fit a task. Filters by name, the tool that runs the model, capability, price ceiling and context window, and can sort the result. This is the tool to reach for when choosing a model — it does the filtering server-side and returns at most 50 rows. All filters combine with AND, and every one of them is optional: calling with no arguments returns the first 50 active models. Two things worth knowing about prices. `maxInputPer1MRub` keeps only models billed per token, because a ruble-per-million ceiling is meaningless for a model billed per image. The `cheap_input` and `cheap_output` sorts push non-token models to the end of the list for the same reason — their token rate reads as zero, which would otherwise put video models at the top of "cheapest".
  • models_get_pricingThe full price of one model in rubles — the authoritative answer to "what does this cost". Prefer this over the pricing embedded in models_list and models_search whenever the model is not billed per token. Those two return "0.00" token rates for such models; only this tool returns `perUnit`, where the real price per image, per second or per thousand characters lives. For speech models it also lists the voices speech_create accepts (`supportedVoices`), for video models the durations, resolutions and aspect ratios video_create accepts (`video`). Errors with InvalidParams if the model id is unknown or the model is no longer active.
  • balance_getCurrent balance of the Hubris account the API key belongs to, in rubles. Worth checking before a long or expensive run: requests are refused once the balance is spent. The balance can go slightly negative — one operation is allowed to overdraw it, and the next one is refused. Two representations of the same number come back. Use `balanceKopecks` for arithmetic and comparisons — it is an exact integer string. Use `balanceRub` for display.
  • chat_completeRun a chat completion on any model in the Hubris catalogue and get the answer back. Full parity with POST /v1/chat/completions — same request shape, same response shape, including tool calls, structured output and reasoning. Streaming is not available here: MCP tool calls are synchronous, and `stream` is ignored if you pass it. This is how you reach a model you cannot reach otherwise — pick an id with models_search, then call it here. Useful for delegating a subtask to a cheaper or a stronger model than the one you are running on. Chat models that draw (Gemini Image, GPT-5 Image) take modalities ["image","text"]; their pictures come back as image content next to the JSON. Voice answers of audio models need streaming and are available through the HTTP API only. The call spends real money from the account balance: it is billed per token at the catalogue price, in rubles. balance_get shows what is left.
  • embeddings_createTurn text into embedding vectors with any embedding model in the Hubris catalogue — for semantic search, RAG, deduplication and clustering. Same as POST /v1/embeddings, OpenAI shape: data[i].embedding is the vector for input[i]. Pass a list of strings to embed a batch in one call, which is faster and cheaper than one call per string. Vectors are long: 1536 numbers make about 30 KB of JSON, and the whole answer lands in your context. Embed only what you will actually store or compare, use `dimensions` where the model allows it, and send large batches through the HTTP API (POST /v1/embeddings). Spends money from the account balance: billed per input token. usage.cost_rub is what this call cost.
  • rerankOrder documents by how well they answer a query, best first, with a relevance score each. Same as POST /v1/rerank. Typical use: a vector or keyword search finds 50–100 candidates, rerank picks the few that really answer the question, and only those go to the model — answers get more accurate and prompts shorter. results[].index points into the documents list you sent. Scores are comparable only within one response. Spends money from the account balance: Cohere models are billed per search (up to 100 documents), the rest per input token. usage.cost_rub is what this call cost.
  • decisions_askAsk a decision model (Jev, Clef, Mercury Decide and others) structured questions about some data and get probabilities instead of text. Same as POST /v1/decisions. Question types: "noul" — yes or no, answered as the probability of yes; "choice" — one option out of criteria; "score" — a level on the scale given in criteria. All questions are answered in one call. Good for classification, routing and triage where you need a calibrated number rather than prose — and much cheaper than asking a chat model. Spends money from the account balance: billed per input token only. usage.cost_rub is what this call cost.
  • image_generateDraw an image from a text description with an image model from the Hubris catalogue (FLUX, Recraft, Seedream, GPT Image and others) and get the picture back right away as image content. Same as POST /v1/images/generations. Only models whose `tool` is "image_generate" work here. Models that draw inside a chat answer and also write text (Gemini Image, GPT-5 Image) have tool "chat_complete" and run there. Sizes such as 4K can be heavier than your client accepts in one answer — ask for 2K or less here. Spends money from the account balance: most image models are billed per image, some per megapixel or per token — models_get_pricing shows the price before you call. The charge shows up in usage_get.
  • speech_createRead text aloud with a text-to-speech model from the Hubris catalogue and get the audio file back as audio content. Same as POST /v1/audio/speech. Many models need a voice: the list of voices is on the model card (models_get_pricing → supportedVoices) — pick one from there. The answer is mp3 unless you ask for pcm. Up to 5 000 characters per call, a few minutes of speech; split longer texts or use the HTTP API (POST /v1/audio/speech). Spends money from the account balance: priced per character of text or per second of audio, depending on the model — models_get_pricing shows which. The charge shows up in usage_get.
  • transcription_createTranscribe a recording to text with a speech recognition model from the Hubris catalogue (Whisper, GPT-4o Transcribe, Deepgram, ElevenLabs Scribe and others). Same as POST /v1/audio/transcriptions with the audio sent as base64. Pass the file content itself, base64-encoded — links to files are not accepted. Every byte of the recording is written out inside this call, so it suits clips of seconds, not minutes; send longer recordings through the HTTP API (POST /v1/audio/transcriptions). Spends money from the account balance: most models are billed per second or minute of audio, some per token. usage.cost_rub is what this call cost.
  • video_createStart generating a video from a text prompt with a video model from the Hubris catalogue (Veo, Kling, Seedance, Wan, Hailuo, Runway and others). Same as POST /v1/videos. Generation takes from one to several minutes, so this returns a task id right away; poll video_get with it every 15–30 seconds until status is "completed" or "failed". Allowed durations, resolutions and aspect ratios differ per model — models_get_pricing lists them under `video`. This tool takes a text prompt only: starting from images or a source video, and models that need a source — video editing, upscaling and talking avatars (FLUX Video Edit, FLUX Video Upscale, Runway Aleph, HeyGen Avatar) — work through the HTTP API (POST /v1/videos). Connected through OAuth (Claude, Cursor, VS Code)? Video needs the permission to create videos on the consent screen. If this tool answers that videos:write is missing, reconnect. Spends money from the account balance: priced per second of video. The largest possible cost is held when the task starts, the actual cost is charged when it completes and the difference is returned; a failed generation returns the whole hold.
  • +3 more on the listing page

Portkey Admin MCP tools 184

  • list_all_usersList accepted org users with id, name, email, role, and timestamps. Use this to find a user_id before get_user, update_user, delete_user, or add_workspace_member; use list_user_invites for pending invitations. Enterprise-gated. Returns 403 on non-Enterprise Portkey plans.
  • invite_userInvite a new org user and optionally provision workspace access and an API key in one call. Workspace assignments apply only after acceptance; use add_workspace_member or update_workspace_member later for follow-up changes.
  • get_user_statsReturn per-user request and cost analytics for a required time range. This is usage-by-user, not population metrics; use get_users_analytics for active-user or cohort trends. Enterprise-gated. Returns 403 on non-Enterprise Portkey plans.
  • get_userGet one accepted user by id and return their profile, role, and timestamps. Use list_all_users to find the id if you only have a name or email, and get_user_invite for pending invitations. Enterprise-gated. Returns 403 on non-Enterprise Portkey plans.
  • update_userUpdate a user's first name, last name, or organization role by id. Email and workspace roles are not editable here; use update_workspace_member for workspace membership changes.
  • delete_userDelete a user from the org by id. This is permanent, removes org and workspace memberships, revokes API keys, and ends active sessions; use delete_user_invite for pending invites instead.
  • list_user_invitesList pending and sent invitations with id, email, role, status, and expiry. Use this to check invite state; use list_all_users for users who already accepted. Enterprise-gated. Returns 403 on non-Enterprise Portkey plans.
  • get_user_inviteGet one invitation by invite id and return its email, role, status, and expiry. Use this for pending invites only; use get_user for accepted users.
  • delete_user_inviteDelete a pending invite and revoke its invite link. This does not affect existing users; use delete_user for full user removal.
  • resend_user_inviteResend the email for a pending invite that has not been accepted, unlike invite_user which creates a new invite. This sends a fresh email without modifying the invite record, expiry, or role; use get_user_invite first if you are unsure whether the invite still exists and list_user_invites to discover invite_ids.
  • list_scim_workspace_mappingsList identity-provider SCIM group mappings that automatically grant Portkey workspace roles. Use it to audit provisioned access or obtain mapping_id before delete_scim_workspace_mapping; filter by workspace, group, or role and page through large directories. This reads mappings only and does not query individual workspace members. Enterprise-gated. Returns 403 on non-Enterprise Portkey plans.
  • create_scim_workspace_mappingMap one identity-provider SCIM group to a Portkey workspace role so current and future group members receive access automatically. Provide exactly one of scim_group_id or scim_group_name; a name can pre-create the Portkey SCIM group before the IdP provisions it. Use list_scim_groups to discover existing groups and list_workspaces for the workspace ID. This changes access provisioning and is distinct from add_workspace_member, which grants one user directly. Enterprise-gated. Returns 403 on non-Enterprise Portkey plans.
  • +172 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Hubris MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "hubris-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "hubris-mcp"
      ],
      "env": {
        "HUBRIS_API_KEY": "YOUR_HUBRIS_API_KEY_HERE",
        "HUBRIS_MCP_URL": "YOUR_HUBRIS_MCP_URL_HERE"
      }
    }
  }
}

Portkey Admin MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "portkey-admin-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "portkey-admin-mcp"
      ],
      "env": {
        "PORTKEY_API_KEY": "YOUR_PORTKEY_API_KEY_HERE"
      }
    }
  }
}

Frequently asked questions

Hubris MCP is categorized under Conversational AI and uses a local stdio subprocess. Portkey Admin MCP belongs to Conversational AI and uses a local stdio subprocess. Pick Hubris MCP for conversational ai work and Portkey Admin MCP for conversational ai.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Hubris MCP has no declared pricing — check the project's own site. Auth: api key required. Portkey Admin MCP is bring-your-own-key: usage is billed by the API provider you supply a key for. Auth: api key required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add hubris-mcp and portkey-admin-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Hubris MCP has a quality signal of 59/100 (Good) with 1 views, 0 installs and 0 GitHub stars. Portkey Admin MCP has 65/100 (Great) with 2 views, 0 installs and 6 GitHub stars.