Skip to main content
Glama
johnqh

ShapeShyft API MCP Server

by johnqh

ShapeShyft API MCP Server

MCP (Model Context Protocol) server that describes and drives the ShapeShyft API — the LLM structured-output platform where each configured endpoint becomes a REST URL that returns schema-conformant JSON.

It gives an AI assistant four things:

  • 61 tools covering every ShapeShyft API route — entities, LLM provider keys, projects, endpoints, analytics, rate limits, storage, users, and AI invocation.

  • 6 documentation resources describing the API itself (overview, routes, data model, worked examples, errors, providers) — readable with no credentials and no network call.

  • 3 prompt templates for common workflows: set up an endpoint, debug one, audit an entity.

  • The /shapeshyft-endpoint skill — a guided workflow for building, invoking, debugging, and auditing endpoints, shipped as a Claude Code plugin.

Package: @sudobility/shapeshyft_api_mcp (BUSL-1.1)

Installation

bun install

Related MCP server: Swagger MCP Server

Configuration

Getting a key

Create a personal API key once, at shapeshyft.ai → Dashboard → Settings → Personal API Keys → name it → Create key. It starts with shyft_ and does not expire. Hand it to the server and let it remember:

set_credentials({ apiKey: "shyft_...", persist: true })
// or, for an unattended agent that should act as the workspace:
set_credentials({ entityApiKey: "shyftent_...", persist: true })

That writes ~/.shapeshyft/config.json (mode 0600), so later sessions start authenticated with nothing else to configure.

Credential resolution

Highest priority first:

  1. An explicit tool argument (e.g. apiKey on invoke_endpoint)

  2. Environment variables

  3. ~/.shapeshyft/config.json

Variable

Required

Description

SHAPESHYFT_API_URL

No

Base URL of the API. Default https://api.shapeshyft.ai; use http://localhost:3000 for local dev

SHAPESHYFT_API_KEY

For admin tools

Personal API key (shyft_...) — preferred, never expires

SHAPESHYFT_AUTH_TOKEN

Only to create/reveal keys

Firebase ID token of the signed-in user

SHAPESHYFT_PROJECT_API_KEY

For AI tools

Project API key (sk_live_...)

SHAPESHYFT_ENTITY_SLUG

No

Default entity slug, so tools can omit entitySlug

SHAPESHYFT_ORG_PATH

No

Default organization path in AI URLs (defaults to the entity slug)

SHAPESHYFT_CONFIG_PATH

No

Override the config file location

The server starts with no credentials at all — the documentation resources, the provider catalog, and the health checks are public. Tools that need a credential return a clear error saying how to get one.

Two key types, different jobs. shyft_... is a personal key that authenticates you against the admin routes. sk_live_... is a project key that lets callers invoke one project's AI endpoints. Creating and revealing personal keys is the one thing a personal key cannot do — that needs a Firebase ID token, so a leaked key cannot mint more.

This makes the MCP tools, the documentation resources, and the /shapeshyft-endpoint skill available in any project.

# Register this repo as a marketplace, then install the plugin from it
claude plugin marketplace add /path/to/shapeshyft_api_mcp
claude plugin install shapeshyft@shapeshyft

Verify with claude plugin details shapeshyft@shapeshyft, which lists the skill and the MCP server.

The plugin is installed as a copy under ~/.claude/plugins/cache/shapeshyft/, so edits in this repo do not take effect until you refresh both the marketplace and the plugin:

claude plugin marketplace update shapeshyft
claude plugin update shapeshyft@shapeshyft

The copy includes node_modules, so run bun install here before installing or updating — the server runs straight from src/index.ts.

The plugin is defined by:

  • .claude-plugin/plugin.json — plugin metadata

  • .claude-plugin/marketplace.json — marketplace entry

  • .mcp.json — MCP server declaration (reads SHAPESHYFT_* from your environment)

  • skills/shapeshyft-endpoint/ — the /shapeshyft-endpoint skill

Option B: Add the MCP server manually

Add to .claude/settings.json (or .mcp.json):

{
  "mcpServers": {
    "shapeshyft-api": {
      "command": "bun",
      "args": ["run", "/path/to/shapeshyft_api_mcp/src/index.ts"]
    }
  }
}

No credentials are needed in the config: run set_credentials({ apiKey, persist: true }) once and the key lives in ~/.shapeshyft/config.json instead of a settings file that might be committed. Environment variables still work, and take precedence.

Tools

Documentation and health

Tool

Purpose

describe_shapeshyft_api

Read the bundled API docs (overview, routes, data-model, examples, errors, providers)

get_configuration

Show the effective API URL, defaults, and which credentials are present (redacted)

set_credentials

Set the API key, token, project key, URL, or defaults — with persist to save them

clear_stored_credentials

Remove saved secrets from the config file, keeping preferences

check_api_health

GET /health, or /health/ready for the database check

get_api_info

GET / — name, version, status

Identity and personal API keys

Tool

Purpose

get_current_user

GET /users/me — who the current credential belongs to, and how it authenticated

list_api_keys, get_api_key

Key metadata (never the secret)

create_api_key, reveal_api_key

Mint or re-read a key — Firebase token required

update_api_key

Rename, or is_active: false to pause a key reversibly

delete_api_key

Permanent revocation

Providers (public)

list_providers, get_provider, list_provider_models

Model entries carry capabilities (vision/audio/video input, media output, web search) and pricing in cents — check them before setting a model on an endpoint.

AI invocation (project API key)

Tool

Purpose

invoke_endpoint

Execute an endpoint → { output, usage, generated_media? }

preview_endpoint_prompt

Build the prompt without calling the LLM — free, ideal for debugging

Entities, members, invitations (Firebase auth)

list_entities, get_entity, create_entity, update_entity, delete_entity, list_entity_members, update_member_role, remove_entity_member, list_entity_invitations, invite_member, renew_invitation, cancel_invitation, list_my_invitations, accept_invitation, decline_invitation

LLM provider keys

list_llm_keys, get_llm_key, create_llm_key, update_llm_key, delete_llm_key

Projects

list_projects, get_project, create_project, update_project, delete_project, get_project_api_key, refresh_project_api_key

Endpoints

list_endpoints, get_endpoint, create_endpoint, update_endpoint, delete_endpoint

Analytics, rate limits, storage, users

get_analytics · get_rate_limits, get_rate_limit_history · get_storage_config, set_storage_config, update_storage_config, delete_storage_config · get_user_info, get_user_subscription, get_user_settings, update_user_settings

Resources

URI

Contents

shapeshyft://api/overview

Architecture, object hierarchy, auth schemes, invocation lifecycle, limits

shapeshyft://api/routes

Every route with method, auth, parameters, and response

shapeshyft://api/data-model

Object shapes, rate limit tiers, database tables

shapeshyft://api/examples

End-to-end setup, curl/TypeScript/Python, schema patterns, multimodal

shapeshyft://api/errors

Error envelope, status codes, troubleshooting

shapeshyft://api/providers

Provider list, model selection, multimodal pipeline, transcription

Prompts

setup_structured_endpoint · debug_endpoint · audit_entity

Example session

describe_shapeshyft_api({ section: "examples" })
list_entities()                                  -> entitySlug "acme"
create_llm_key({ key_name: "Prod Anthropic", provider: "anthropic", api_key: "sk-ant-..." })
create_project({ project_name: "support-tools", display_name: "Support Tools" })
create_endpoint({ projectId, endpoint_name: "classify-ticket", llm_key_id,
                  model: "claude-sonnet-4-6-20260217",
                  instructions: "Classify the ticket and judge sentiment.",
                  output_schema: { type: "object", properties: {
                    category:  { type: "string", enum: ["billing", "bug", "feature", "other"] },
                    sentiment: { type: "string", enum: ["positive", "neutral", "negative"] }
                  }, required: ["category", "sentiment"] } })
get_project_api_key({ projectId })
invoke_endpoint({ projectName: "support-tools", endpointName: "classify-ticket",
                  input: { text: "You billed me twice this month." } })
  -> { output: { category: "billing", sentiment: "negative" },
       usage: { tokens_input: 312, tokens_output: 18, latency_ms: 940,
                estimated_cost_cents: 0.11 } }

The /shapeshyft-endpoint skill

Installed with the plugin, the skill routes a request into one of four flows and checks credentials before touching anything:

Flow

Covers

A — Build

task → output schema → provider key → model → project → endpoint → verified invocation

B — Invoke

resolve names, run input through an endpoint, report output plus cost and latency

C — Debug

map 401/404/405/429 to a cause; fix schema-conformance and quality problems

D — Audit

inventory keys, projects, and endpoints; review spend, failures, and quota headroom

Usage:

/shapeshyft-endpoint

Or just describe what you want:

"Turn this classification prompt into an API" "My endpoint keeps returning the wrong category" "What are my ShapeShyft endpoints costing this month?"

Bundled references:

  • skills/shapeshyft-endpoint/references/creating-endpoints.mdcreate_endpoint field reference and six worked recipes, each pairing an input payload with its schemas and response

  • skills/shapeshyft-endpoint/references/schema-design.md — output schemas models actually satisfy

  • skills/shapeshyft-endpoint/references/model-selection.md — picking a provider and model from capabilities and pricing

Development

bun run dev        # Run the server over stdio
bun run build      # Bundle to dist/index.js
bun run typecheck  # TypeScript check
bun run verify     # typecheck + build
bun run start      # Run the production bundle

Validate the plugin and skill after editing them:

claude plugin validate .        # marketplace + plugin manifests
claude plugin validate skills   # skill frontmatter and structure

Project structure

src/
├── index.ts            # Entry: env config, registration, stdio transport
├── client.ts           # HTTP client: auth-mode routing, envelope unwrapping
├── prompts.ts          # Prompt templates
├── resources/          # Embedded API documentation (resources + describe_shapeshyft_api)
└── tools/              # One module per route family

skills/
└── shapeshyft-endpoint/
    ├── SKILL.md                        # The /shapeshyft-endpoint skill
    └── references/
        ├── creating-endpoints.md       # create_endpoint recipes with payload examples
        ├── schema-design.md            # Output schema design guide
        └── model-selection.md          # Provider and model selection guide

.claude-plugin/         # plugin.json + marketplace.json
.mcp.json               # MCP server declaration used by the plugin

Architecture

AI assistant (Claude Code / Claude Desktop)
    ↕ stdio (MCP protocol)
ShapeShyft API MCP server (this project)
    ↕ HTTP / REST
ShapeShyft API (Hono on Bun, PostgreSQL)
    ↕
10 LLM providers (OpenAI, Anthropic, Gemini, Groq, Mistral, xAI, DeepSeek,
                  Perplexity, Cohere, LM Studio)

The server is a thin HTTP client. Each tool maps to one REST route, and the right Authorization header is chosen from the route family: a Firebase ID token for admin routes, the project API key for /api/v1/ai/*, nothing for public routes. Responses are unwrapped from the { success, data, timestamp } envelope; failures come back as MCP tool errors carrying the HTTP status and any provider details.

  • shapeshyft_api — the Hono backend this server wraps

  • shapeshyft_types — shared TypeScript type definitions

  • shapeshyft_client — API client hooks for web/native apps

  • shapeshyft_lib — business logic stores

  • shapeshyft_app — React web frontend

License

BUSL-1.1

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/johnqh/shapeshyft_api_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server