Portkey Admin MCP vs Relay

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

Portkey Admin MCP logoPortkey Admin MCPConversational AI · Local subprocess (stdio)Full Portkey Admin API MCP server — configs, prompts, keys, analytics, and more.65GreatAuth: api key requiredRelay logoRelayConversational AI · Local subprocess (stdio)Run any Relay model (image, video, audio, LLM), poll tasks, upload files and search Relay's docs.61GoodAuth: not declared

Verdict: choose Portkey Admin MCP for conversational ai work as a local process; choose Relay 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?

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

Relay logoChoose Relay when

  • You need dedicated capabilities in the Conversational AI domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: RELAY_API_KEY, RELAY_BASE_URL.
  • You want tools like search_models, get_model, get_pricing.
Explore Relay

Feature & specification comparison

Rows where the two servers differ are marked.

SpecPortkey Admin MCP logoPortkey Admin MCPRelay logoRelay
CategoryConversational AIConversational AI
Quality signal65/100 · Great61/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthAPI key requiredNot declared
PricingBYOK (pay the provider)Not declared
Required env varsPORTKEY_API_KEYRELAY_API_KEYRELAY_BASE_URL
Verified ownerCommunity listingCommunity listing
GitHub stars60
Directory activity 2 views 0 installs 0 upvotes 1 views 0 installs 0 upvotes
Tools18414

Tools & capabilities

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

Relay tools 14

  • search_modelsLists Relay models by tag and/or text. Common tags: text-to-image, image-to-image, text-to-video, image-to-video, video-to-video, text-to-speech, speech-to-text, text-to-text, text-to-embedding. image-to-image also lists every image model that takes an input image. Returns name, tag, route and accepts (input media the model takes, e.g. ["image"]; [] for none) per model (at most 50). Then call get_model with a name for its input schema.
  • get_modelReturns one model's route, request_schema (what run_model's input must follow), request_example, pricing and availability. Then call run_model with an input shaped like request_example.
  • get_pricingReturns Relay's public list prices (USD), optionally for one model, plus media_storage: the per-file fees of the store_output / upload retention SKUs (relay1d, relay7d, …). Then estimate_cost for a number.
  • estimate_costEstimates the USD cost of a call from the public price list: an estimate, not an invoice (the bill uses provider-reported usage and any custom pricing on your account). Pass only the usage fields the model's billing_type (see get_model or get_pricing) reads: per_token: input_tokens, output_tokens, cached_input_tokens; per_image: image_count, resolution_tier; per_second_video: duration_seconds, quality_mode, sound; per_second_audio: duration_seconds; per_character: character_count; per_media_token: media_input_tokens, media_output_tokens. Add store_output / retention / file_count for storage fees.
  • run_modelRuns any Relay model by name (billed to your key). input follows get_model's request_schema (request_example runs as is). Every model whose schema takes async (image, video, audio) is submitted as a task: it waits up to 45 s, past that it returns a task_id — do not resubmit, call check_task. Chat models answer inline. Result links expire 1 h after completion unless store_output names a media_storage SKU from get_pricing. Pass an idempotency_key if you may retry the same submit. Needs a Relay credential.
  • check_taskChecks a task run_model returned (no key needed: the task_id is the capability). Waits up to 30 s for it to finish; returns the result when completed, else its status: then call check_task again, never resubmit. Task results are kept 1 h after they finish.
  • upload_fileHosts an image, video or audio file on Relay and returns its url: pass that url to any *_url input of run_model. Give exactly one of path (local server only, ≤ 100 MB), base64 (≤ 4 MB) or url (a public link Relay copies). retention: relay1h (default, free within a daily quota) or a media_storage SKU from get_pricing. Needs a Relay credential.
  • list_workflowsList Relay's workflow templates: multi-step pipelines (e.g. script → voiceover) run as one call. Each entry has workflow_id, input_schema and its steps (step_id + model). Run one with run_workflow; inputs follow input_schema.
  • run_workflowStart a workflow run (one submit) and wait up to wait_seconds (≤ 45) for it to finish. Completed → the final output; still running → run_id: call check_workflow_run with it, never resubmit (a new run bills again). Each step is billed as an ordinary request. webhook_url gets ONE signed workflow.completed / workflow.failed delivery when the run ends. Get workflow_id and the inputs shape from list_workflows. Needs a Relay credential.
  • check_workflow_runPoll a workflow run by run_id, waiting up to wait_seconds (≤ 30) for it to end. Completed → the final output; failed / cancelled → the error; still running → its steps so far: call check_workflow_run again. No key needed: the run_id is the access token.
  • cancel_workflow_runCancel a workflow run. Cancels between steps only: a step already running completes and bills. A run that has already ended answers WORKFLOW_RUN_NOT_CANCELLABLE. Needs a Relay credential.
  • get_creditsRead the account's credit balance, active promo credits and consumption. Needs a dashboard JWT or a custom-tier superkey; a plain inference key gets PERMISSION_DENIED (403). Needs a Relay credential.
  • +2 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.

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"
      }
    }
  }
}

Relay

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "relay-4": {
      "command": "npx",
      "args": [
        "-y",
        "@relaygpu/mcp"
      ],
      "env": {
        "RELAY_API_KEY": "YOUR_RELAY_API_KEY_HERE",
        "RELAY_BASE_URL": "YOUR_RELAY_BASE_URL_HERE"
      }
    }
  }
}

Frequently asked questions

Portkey Admin MCP is categorized under Conversational AI and uses a local stdio subprocess. Relay belongs to Conversational AI and uses a local stdio subprocess. Pick Portkey Admin MCP for conversational ai work and Relay 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.

Portkey Admin MCP is bring-your-own-key: usage is billed by the API provider you supply a key for. Auth: api key required. Relay has no declared pricing — check the project's own site. 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 portkey-admin-mcp and relay-4 as separate keys in the same mcpServers object, and your assistant will call tools from either one.

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