Openrouter Multimodal

io.github.stabganPublished by GitHub account stabganv4.5.1Updated Nov 3, 2026

Chat with 300+ LLMs via OpenRouter. Analyze and generate images, audio, and video from MCP.

VerifiedSTDIODesktop onlyMedia & DesignAI & ML

Overview

AI-generated overview

Connects an assistant to OpenRouter's unified API for chat with 300+ models plus image, audio and video analysis and generation.

What you can do
  • Chat with 300+ models, including async jobs, structured output, web search and provider routing
  • Analyze images, audio and video files, and generate images, speech, music and video clips
  • Transcribe audio and convert text to speech with dedicated speech tools
  • Create vector embeddings, rerank documents and get structured yes/no or scored decisions
  • Search, inspect and validate models in the OpenRouter catalog, and check API health
When to use it
Useful when an assistant should reach many different LLMs through one key, or needs multimodal work such as reading a diagram, transcribing a recording, or producing an image, voice clip or short video without separate integrations.
Requirements
Runs locally over stdio via npx (Node.js 22+) or a Docker image; a Python launcher also needs Node installed. Requires an OpenRouter API key in OPENROUTER_API_KEY and network access to OpenRouter. Optional variables set the default model, output directory, caching, reasoning passthrough and provider routing.
Before you install
The OpenRouter API key is a billable credential: free models cover chat and vision, but audio and video generation usually needs paid credits. Prompts and media files are sent to OpenRouter and its upstream providers. Generation tools write files to disk, limited to the configured output directory. Analysis output is flagged as untrusted content.

Installation

In SourceWeft

  1. Open Openrouter Multimodal in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[OpenRouter MCP Multimodal — MCP server for chat, vision, audio, and video AI tools]

OpenRouter MCP Multimodal

The MCP server for multimodal AI agents.
One install · 21 tools · 300+ OpenRouter models · text, vision, audio & video — analysis and generation.

[npm version] [PyPI version] [GitHub release] [Docker version] [CI status] [Apache 2.0 license] [Node.js 22+]

[npm downloads] [Docker pulls] [MCP Registry] [Smithery MCP registry]

Quick start · Tools · Examples · Security · Troubleshooting · Development · Releasing · FAQ


What is this?

OpenRouter MCP Multimodal is a production-grade Model Context Protocol (MCP) server — listed on the official MCP Registry as io.github.stabgan/openrouter-multimodal. It connects AI coding agents (Cursor, Claude Desktop, VS Code, Windsurf, Cline, and others) to OpenRouter's unified LLM API over stdio.

Unlike text-only MCP servers, one install covers the full multimodal surface:

CapabilityToolsHighlights
Chatchat_completion, start_chat_completion, get_chat_completion_status300+ models, :nitro / :floor / :free / :online / :exacto suffixes, provider routing, web search, response caching, reasoning tokens, reasoning effort control, structured output (JSON Schema), async jobs, multi-model fusion, subagent delegation, response healing
Visionanalyze_image, generate_image, generate_image_dedicatedOCR, captioning, VQA, image generation with reference inputs, dedicated Image API with resolution/quality/format control
Audioanalyze_audio, generate_audio, text_to_speech, speech_to_textTranscription, speech/music generation, dedicated TTS (Deepgram, ElevenLabs, OpenAI; free Deepgram default, voices, mp3/pcm), dedicated STT (Whisper, GPT-4o Transcribe, Voxtral, ElevenLabs Scribe)
Videoanalyze_video, generate_video, generate_video_from_image, get_video_statusClip understanding, Veo 3.1 / Seedance 2.5 / Kling v3.0 / Wan 2.7 / Grok Imagine Video generation with progress notifications
Embeddingembed_text37+ embedding models (text-embedding-3-small/large, Nomic, Jina, Voyage, etc.)
DecisionsdecideStructured yes/no, choice, or score decisions with calibrated probabilities (System One models)
Catalogsearch_models, get_model_info, validate_model, rerank_documents, health_checkModel discovery, validation, reranking, ops health

Production hardening: input/output path sandboxes (including analyze_* local files as of v4.5.2), SSRF guards, structured errors with _meta.code, MCP 2025-11-25 structured outputs + tool icons, async video progress notifications, and 3929 automated tests (3905 unit/mock + 7 regression + 17 live integration).

Quick start

1. Get an API key (free tier works) → openrouter.ai/keys

2. Run the server

bash
export OPENROUTER_API_KEY=sk-or-v1-...npx -y @stabgan/openrouter-mcp-multimodal

3. Add to your MCP client — copy one JSON block from Install into your client config:

ClientConfig location
CursorProject: .cursor/mcp.json · User: Cursor Settings → MCP
Claude DesktopmacOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json
VS Code.vscode/mcp.json (workspace) or User Settings → MCP
WindsurfWindsurf Settings → MCP (same mcpServers JSON shape as Cursor)

Use the mcpServers object from Manual config below.

No credits required to start. Free models such as google/gemma-4-26b-a4b-it:free work for chat and vision. Video/audio generation typically needs credits.

Install

MCP servers are distributed through several packaging models. This server is implemented in Node.js/TypeScript; the table below maps each ecosystem method to how you run it here.

MethodRuntimeBest forThis server
npxNode.js 22+Most MCP clients (default)✅ @stabgan/openrouter-mcp-multimodal
uvx / pipxPython 3.10+ and Node.js 22+Python-first workflows, same pattern as PyPI MCP servers✅ mcp-server-openrouter-multimodal
npm globalNode.js 22+Pin a version without re-downloading✅
node (local)Node.js 22+Contributors / air-gapped builds✅
Docker HubDockerIsolation, no Node on host✅ stabgan/openrouter-mcp-multimodal
GHCRDockerGitHub-native OCI pulls✅ ghcr.io/stabgan/openrouter-mcp-multimodal
Smithery CLINode.js (via installer)Interactive install into Claude/Cursor/etc.✅
MCP Registrynpm or OCIOfficial discovery (io.github.stabgan/openrouter-multimodal)✅ listing
One-click deeplinksNode.jsCursor, VS Code, Kiro✅
Claude Code CLINode.jsTerminal-first Claude Code users✅
MCP InspectorNode.jsDebug / list tools locally✅
Windows cmd /c npxNode.jsClaude Desktop / Cursor when npx not on GUI PATH✅ see below
pip / uv (direct)—Native Python MCP servers only— use uvx row above
DXT desktop extensions—Bundled Claude Desktop .dxtnot yet
Remote HTTP / SSE—Hosted Smithery / Cloudflare endpointsvia Smithery

uvx vs npx: In the MCP ecosystem, npx runs npm (Node) packages and uvx runs PyPI (Python) packages. Because this server is Node-based, uvx uses a thin Python launcher that execs npx -y @stabgan/openrouter-mcp-multimodal — you still need Node installed.

One-click

Paste your OPENROUTER_API_KEY when prompted — deeplinks use placeholders so secrets never appear in URLs.

Manual config

npx (recommended)
bash
export OPENROUTER_API_KEY=sk-or-v1-...npx -y @stabgan/openrouter-mcp-multimodal
json
{  "mcpServers": {    "openrouter": {      "command": "npx",      "args": ["-y", "@stabgan/openrouter-mcp-multimodal"],      "env": {        "OPENROUTER_API_KEY": "sk-or-v1-..."      }    }  }}

Pin a release: "args": ["-y", "@stabgan/[email protected]"]

uvx / pipx (Python launcher)

Install uv (includes uvx), ensure Node.js 22+ is also on your PATH, then:

bash
export OPENROUTER_API_KEY=sk-or-v1-...uvx mcp-server-openrouter-multimodal# pin npm version: OPENROUTER_MCP_NPM_VERSION=5.1.3 uvx mcp-server-openrouter-multimodal
json
{  "mcpServers": {    "openrouter": {      "command": "uvx",      "args": ["mcp-server-openrouter-multimodal"],      "env": {        "OPENROUTER_API_KEY": "sk-or-v1-..."      }    }  }}

pipx equivalent: pipx run mcp-server-openrouter-multimodal

Optional: OPENROUTER_MCP_NPM_VERSION=5.1.3 pins the underlying npm package.

npm global
bash
npm install -g @stabgan/openrouter-mcp-multimodal
json
{  "mcpServers": {    "openrouter": {      "command": "openrouter-multimodal",      "env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }    }  }}
node (local clone)
bash
git clone https://github.com/stabgan/openrouter-mcp-multimodal.gitcd openrouter-mcp-multimodalnpm ci && npm run build
json
{  "mcpServers": {    "openrouter": {      "command": "node",      "args": ["/absolute/path/to/openrouter-mcp-multimodal/dist/index.js"],      "env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }    }  }}
Docker
bash
docker run --rm -i -e OPENROUTER_API_KEY=sk-or-v1-... stabgan/openrouter-mcp-multimodal:latest
json
{  "mcpServers": {    "openrouter": {      "command": "docker",      "args": [        "run",        "--rm",        "-i",        "-e",        "OPENROUTER_API_KEY=sk-or-v1-...",        "stabgan/openrouter-mcp-multimodal:latest"      ]    }  }}

Use -i (interactive stdio). Avoid -t (TTY corrupts MCP framing on some hosts).

GHCR (GitHub Container Registry)
bash
docker run --rm -i -e OPENROUTER_API_KEY=sk-or-v1-... \  ghcr.io/stabgan/openrouter-mcp-multimodal:5.1.3
json
{  "mcpServers": {    "openrouter": {      "command": "docker",      "args": [        "run",        "--rm",        "-i",        "-e",        "OPENROUTER_API_KEY=sk-or-v1-...",        "ghcr.io/stabgan/openrouter-mcp-multimodal:5.1.3"      ]    }  }}
Smithery

Interactive install (writes config for your client):

bash
npx -y @smithery/cli install @stabgan/openrouter-mcp-multimodal --client claude# or: --client cursor | vscode | windsurf | ...

Listing: smithery.ai/server/@stabgan/openrouter-mcp-multimodal

MCP Registry

Official name: io.github.stabgan/openrouter-multimodal

Clients that support registry-driven install will offer npm or Docker; otherwise use the JSON blocks above.

Claude Code CLI
bash
claude mcp add openrouter -- npx -y @stabgan/openrouter-mcp-multimodal# project scope:claude mcp add --scope project openrouter -- npx -y @stabgan/openrouter-mcp-multimodal

Set OPENROUTER_API_KEY in your shell or client env before starting Claude Code.

MCP Inspector

Debug tools/list and tool calls against a live OpenRouter key:

bash
export OPENROUTER_API_KEY=sk-or-v1-...npx -y @modelcontextprotocol/inspector npx -y @stabgan/openrouter-mcp-multimodal
Windows npx

When Claude Desktop or Cursor cannot find npx (GUI apps often miss shell PATH), wrap with cmd:

json
{  "mcpServers": {    "openrouter": {      "command": "cmd",      "args": ["/c", "npx", "-y", "@stabgan/openrouter-mcp-multimodal"],      "env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }    }  }}

If still failing, use the full path from where npx as the command.

Why this server?

CapabilityThis serverTypical MCP LLM servers
Text chat (300+ models)✅✅
Image analysis + generation✅partial
Audio analysis + TTS + STT✅❌
Video analysis + generation✅❌
Vector embeddings (37+ models)✅❌
Structured decisions (System One)✅❌
Model search / validate / rerank✅❌
Path sandbox + SSRF protection✅rare
MCP 2025 structured outputs✅rare
Async video + progress notifications✅❌

Tools

21 MCP tools. Each description includes Use when, Good/Bad examples, Fails when, and Works with so agents pick the right tool and recover from errors.

ToolPurpose
chat_completionText chat, web search, provider routing, caching, reasoning, structured output
start_chat_completionAsync background job for long-running reasoning models
get_chat_completion_statusPoll / retrieve async completion results
analyze_imageVision — local path, URL, or data URL + question
analyze_audioTranscribe / analyze audio files
analyze_videoDescribe / Q&A over video files
generate_imageText-to-image via chat completions with reference images
generate_image_dedicatedText-to-image via dedicated /api/v1/images (resolution, quality, format)
generate_audioText-to-speech / music via chat completions
text_to_speechDedicated TTS (/api/v1/audio/speech) — Deepgram, ElevenLabs, OpenAI; voices, speed, mp3/pcm
speech_to_textDedicated STT (/api/v1/audio/transcriptions) — Whisper, GPT-4o Transcribe, Voxtral, ElevenLabs Scribe
generate_videoText-to-video (async, resumable)
generate_video_from_imageImage-to-video (narrower schema)
get_video_statusPoll / resume video jobs
search_modelsPaginated model catalog search
get_model_infoPricing, context, modalities
validate_modelCheap model ID existence check
rerank_documentsRelevance ranking for RAG
embed_textVector embeddings (37+ models: text-embedding-3-small/large, Nomic, etc.)
decideStructured decisions with calibrated probabilities (System One models)
health_checkAPI key + reachability probe

Every error carries _meta.code from a closed taxonomy (13 codes). Switch on these for programmatic handling:

_meta.codeMeaningRecovery
INVALID_INPUTBad or missing argumentsCheck tool description for correct schema
INVALID_CREDENTIALSAPI key missing, invalid, or revokedRegenerate at openrouter.ai/keys
UNSAFE_PATHLocal path escaped the input/output sandboxMove files under OPENROUTER_INPUT_DIR / OPENROUTER_OUTPUT_DIR
UPSTREAM_HTTPNon-auth HTTP error from OpenRouter (4xx/5xx)Check _meta.details.status; retry if transient
UPSTREAM_TIMEOUTUpstream did not respond in timeRetry, or use start_chat_completion for slow models
UPSTREAM_REFUSEDContent policy, rate limit, or insufficient creditsCheck _meta.retry_after_seconds; review prompt or add credits
UNSUPPORTED_FORMATFile is not a recognized media formatVerify file type matches tool expectations
RESOURCE_TOO_LARGEFile exceeds fetch/inline size capTrim file or use save_path to skip inline
ZDR_INCOMPATIBLEModel/provider requires zero data retentionUse a ZDR-compatible provider or different model
MODEL_NOT_FOUNDModel slug not in OpenRouter catalogRun validate_model or search_models first
JOB_FAILEDAsync job (video/chat) failed on provider sideCheck _meta.details; retry or change model
JOB_STILL_RUNNINGAsync job not yet complete (not an error)Call get_video_status / get_chat_completion_status to poll
INTERNALUnexpected server-side errorReport if reproducible

Errors include _meta.suggestions with agent-oriented next steps when available.

Binary tool results (v4.7.0+)

Generate tools (generate_image, generate_image_dedicated, generate_audio, text_to_speech, generate_video, generate_video_from_image, get_video_status) return image, audio, or video bytes. As of 4.7.0 the behavior is explicit:

save_pathTool result
SetText pointer only — e.g. Image saved to: out.png (… bytes, image/png) plus _meta.save_path. No inline base64 (avoids duplicating large payloads in the MCP channel).
Unset, under byte ceilingInline media block and summary text (images/audio use MCP image / audio types; video uses MCP resource blocks).
Unset, over ceilingText only with a hint to pass save_path.

Default inline ceilings (override per kind or globally):

KindDefaultEnv vars (precedence: per-kind → global)
Image1 MiBOPENROUTER_IMAGE_INLINE_MAX_BYTES → OPENROUTER_INLINE_MAX_BYTES
Audio1 MiBOPENROUTER_AUDIO_INLINE_MAX_BYTES → OPENROUTER_INLINE_MAX_BYTES
Video10 MiBOPENROUTER_VIDEO_INLINE_MAX_BYTES → OPENROUTER_INLINE_MAX_BYTES

If you previously relied on both a saved file and inline media in the same tool result, read the file from _meta.save_path (or omit save_path to get inline media when under the ceiling).

Examples

Chat (free model)

json
{  "tool": "chat_completion",  "arguments": {    "model": "google/gemma-4-26b-a4b-it:free",    "messages": [{ "role": "user", "content": "Summarize MCP in one sentence." }]  }}

Chat with structured output (JSON Schema)

json
{  "tool": "chat_completion",  "arguments": {    "model": "openai/gpt-4o",    "messages": [{ "role": "user", "content": "Extract the name and age from: 'Alice is 30 years old.'" }],    "response_format": {      "type": "json_schema",      "json_schema": {        "name": "person",        "schema": {          "type": "object",          "properties": {            "name": { "type": "string" },            "age": { "type": "integer" }          },          "required": ["name", "age"]        }      }    }  }}

For simpler JSON without a schema, use "response_format": { "type": "json_object" }. Add "response_healing": true to auto-fix malformed JSON.

Analyze an image

json
{  "tool": "analyze_image",  "arguments": {    "image_path": "diagram.png",    "question": "List every label in this diagram."  }}

Use image_path and question — not image / prompt.

Search models (vision + free)

json
{  "tool": "search_models",  "arguments": {    "query": "gemma",    "capabilities": { "vision": true },    "limit": 10,    "offset": 0  }}

Generate video (async)

json
{  "tool": "generate_video",  "arguments": {    "model": "google/veo-3.1",    "prompt": "Ocean waves at sunrise, cinematic drone shot",    "duration": 4,    "save_path": "river.mp4"  }}

If the job is still running when max_wait_ms elapses, the response succeeds with _meta.code: JOB_STILL_RUNNING and a video_id — call get_video_status to resume. This is not an error.

With save_path set (as above), the result is a text pointer to the saved file once complete — not inline video. See Binary tool results.

Embed text (vector embeddings)

json
{  "tool": "embed_text",  "arguments": {    "texts": ["What is MCP?", "Model Context Protocol enables tool use for LLMs."],    "model": "openai/text-embedding-3-small",    "dimensions": 1024  }}

Returns embedding arrays for RAG, semantic search, or clustering. 37+ models supported — pass a single string or an array of up to 2048 texts.

Structured decision (System One)

json
{  "tool": "decide",  "arguments": {    "questions": {      "is_bug": {        "type": "noul",        "instructions": "Is this a bug report or a feature request?",        "criteria": {          "true": "Describes broken or incorrect behavior",          "false": "Requests new functionality"        }      }    },    "state": {      "ticket": "The login button does not respond when clicked on Safari."    }  }}

Returns calibrated probabilities instead of generated text. Three question types: noul (yes/no), choice (pick one category), score (ordinal rubric). Models: typesafe/jev-1.13 (default), upstage/solar-decide, microsoft/decision-1.

More examples: docs/plans/tool-description-improvement.md

Security

  • Input path sandbox — local paths on analyze_* and reference images must stay inside OPENROUTER_INPUT_DIR (falls back to OPENROUTER_OUTPUT_DIR, then cwd)
  • Output path sandbox — save_path must stay inside OPENROUTER_OUTPUT_DIR
  • Async job reads — get_chat_completion_status resolves disk paths only under OPENROUTER_OUTPUT_DIR/openrouter-jobs/ (4.7.0+)
  • SSRF protection — private/reserved IPs blocked on URL fetches
  • Untrusted content — analyze outputs tagged _meta.content_is_untrusted: true
  • Prototype-pollution defense — all API output boundaries (model records, embeddings, decisions, rerank results, log context) recursively strip __proto__, constructor, and prototype keys before forwarding to MCP clients
  • Secret redaction — the stderr JSON logger redacts API keys and sensitive values; stdout is reserved for MCP protocol traffic

Override sandboxes only with OPENROUTER_ALLOW_UNSAFE_PATHS=1 (discouraged).

Report vulnerabilities: SECURITY.md (private disclosure — do not file public issues for exploits).

Configuration

Environment variables
VariableRequiredDefaultDescription
OPENROUTER_API_KEYYes—OpenRouter API key
OPENROUTER_DEFAULT_MODELNogoogle/gemma-4-26b-a4b-it:freeDefault when tools omit model
OPENROUTER_OUTPUT_DIRNocwdSandbox root for save_path
OPENROUTER_INPUT_DIRNoOUTPUT_DIR or cwdSandbox root for local input files
OPENROUTER_INLINE_MAX_BYTESNo1048576 (image/audio)Global inline media ceiling
OPENROUTER_IMAGE_INLINE_MAX_BYTESNofalls back to globalPer-kind inline ceiling
OPENROUTER_AUDIO_INLINE_MAX_BYTESNofalls back to globalPer-kind inline ceiling
OPENROUTER_VIDEO_INLINE_MAX_BYTESNo10485760Video inline ceiling
OPENROUTER_LOG_LEVELNoinfoerror / warn / info / debug

See .env.example for the full list (provider routing, fetch limits, caching, video polling, async jobs, integration-test overrides).

Development

bash
git clone https://github.com/stabgan/openrouter-mcp-multimodal.gitcd openrouter-mcp-multimodalnpm installcp .env.example .env   # add OPENROUTER_API_KEYnpm run build

Testing

CommandWhat it runs
npm test3905 unit + mock tests (no API key, <20s)
npm run test:regression7 security + schema regression guards
npm run test:integration17 live OpenRouter scenarios (requires .env key)
npm run test:e2eFull MCP stdio smoke (scripts/live-e2e.mjs)
npm run cilint + format + version sync + build + all tests

Free models for CI / zero-credit accounts: integration tests default to google/gemma-4-26b-a4b-it:free (override with OPENROUTER_INTEGRATION_MODEL). GitHub Actions requires the OPENROUTER_API_KEY repository secret.

Mock tests live under src/__tests__/mock/ and cover handlers, path sandboxes, SSRF blocks, model-cache pagination, tool descriptions, and structured outputs — 396 additional cases beyond the core suite.

bash
npm run lintnpm run format:checknpm run version:check   # package.json vs src/version.ts, server.json, pyproject.toml

Releasing

Published artifacts (npm, PyPI/uvx, Docker, GHCR) all ship from the same semver on a git tag (vX.Y.Z). Pushing to main runs tests but does not publish to npm or PyPI.

Normal flow: merge conventional commits to main → Release Please opens a Release PR → merge it → tag is created → CI publishes everywhere.

Manual flow: bump all version files → npm run version:check → npm run ci + smoke tests → commit → git tag vX.Y.Z → git push origin vX.Y.Z.

Full checklist, file list, CI secrets, and agent instructions:

Troubleshooting

SymptomLikely causeFix
Server exits immediately / OPENROUTER_API_KEY is requiredMissing or empty API keySet OPENROUTER_API_KEY in client env or shell — get one at openrouter.ai/keys
_meta.code: INVALID_CREDENTIALS or HTTP 401Bad or revoked keyRegenerate at openrouter.ai/keys; restart the MCP client
_meta.code: MODEL_NOT_FOUNDTypo or retired model IDRun search_models or validate_model; check openrouter.ai/models
HTTP 402 / insufficient creditsPaid model or generation on zero balanceAdd credits at openrouter.ai/credits or use a :free model
_meta.code: UPSTREAM_HTTP with 429Rate limitWait for _meta.retry_after_seconds if present; reduce concurrency
_meta.code: UNSAFE_PATHLocal path outside sandboxPut files under OPENROUTER_INPUT_DIR or set OPENROUTER_OUTPUT_DIR wider; see Security
npx not found (Windows GUI apps)GUI PATH differs from terminalUse the Windows npx cmd /c wrapper
No inline image/audio after upgradev4.7.0 with save_path setExpected — result is text + _meta.save_path only; omit save_path or read the saved file
MCP client shows stale tool listClient cacheRestart MCP / reload window after upgrading the package pin

Structured errors include _meta.suggestions with agent-oriented next steps when available.

FAQ

Do I need paid OpenRouter credits?

No, to get started. Free models work for chat and vision. Audio/video generation usually requires credits; analysis may return 402 on some models — the server surfaces that as a structured error.

Which MCP clients are supported?

Any MCP-compatible client over stdio: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Cline, Kiro, and custom agents.

How is this different from calling OpenRouter directly?

This server adds MCP tool schemas, security sandboxes, error taxonomy, model caching, async video polling with progress notifications, and agent-oriented tool descriptions — so LLMs invoke the right capability without custom HTTP glue.

Where is the security advisory for path traversal?

Fixed in 4.5.2+ — see GHSA-3q7p-736f-x44v, SECURITY.md, and docs/solutions/security-issues/.

Compatibility

Works with any MCP client. Protocol: MCP 2025-11-25 (backwards-compatible with 2025-06-18 and earlier). Node ≥ 22 (Docker image uses Node 24).

License

Apache 2.0 — see LICENSE.

Contributing

Issues and PRs welcome. For large changes, open an issue first.

Before submitting: run npm run ci. Use Conventional Commits (fix:, feat:, etc.) so Release Please can cut the next release. See docs/RELEASING.md if you need to ship a version.

Source: README.md at commit dbc5ceb

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v4.5.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts