Spanlens logoHealth: ActiveRecent health check succeeded.Last checked 8/7/2026, 3:36:19 PM

SpanlensMonitoring

spanlens
View Repository11

Open-source LLM observability server for logging, cost tracking, agent tracing, and analytics across multiple providers.

Overview

Spanlens provides detailed observability for LLM usage by logging every request with metrics like cost, tokens, latency, and agent traces. It supports OpenAI, Anthropic, Gemini, and other providers, with integrations for popular frameworks like LangChain and Vercel AI SDK. Spanlens is self-hostable via Docker and exposes data through an MCP server, enabling querying from any MCP client. Use it to monitor LLM usage, detect anomalies, and analyze per-user or per-model costs without rewriting your SDK or migrating platforms.

Use cases

โ€ขLog and analyze LLM request details including prompts, responses, and costs
โ€ขTrack token usage and latency metrics across multiple LLM providers
โ€ขDetect anomalies and monitor usage patterns in real time
โ€ขPerform agent tracing for multi-step or tool-augmented LLM workflows
โ€ขQuery aggregated cost and usage statistics per user or model

Key features

โ€ขRequest logging with full prompt, response, cost, and latency data
โ€ขAgent tracing for multi-step and tool-based LLM calls
โ€ขCost tracking and model usage analytics across providers
โ€ขAnomaly detection and PII scanning
โ€ขPrompt versioning and A/B experiment support
โ€ขSelf-hostable with a single Docker command and open source MIT license

Quick Install

Automated & IDE Setup

Copy the AI prompt to automatically install this server into your coding agent (Claude Code, Cursor, etc.), or use 1-click editor setup below.

Add to CursorAdd to VS Code
Manual Client & Custom JSON ConfigExpand JSON โ–พ

Install Config Generator

claude_desktop_config.json
{
  "mcpServers": {
    "spanlens-spanlens-2": {
      "command": "npx",
      "args": [
        "-y",
        "@spanlens/cli"
      ]
    }
  }
}

๐Ÿ’ก Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

Capabilities & Tool Schemas

Inspect callable tools, capabilities, and parameters exposed to AI agents by Spanlens.

Extracted Tool Capabilities
Request logging with full prompt, response, cost, and latency data
Agent tracing for multi-step and tool-based LLM calls
Cost tracking and model usage analytics across providers
Anomaly detection and PII scanning
Prompt versioning and A/B experiment support
Self-hostable with a single Docker command and open source MIT license

Documentation Overview

Spanlens

GitHub stars License: MIT npm version PyPI version npm downloads

Open-source LLM observability you can turn on in one line. Point your OpenAI, Anthropic, or Gemini client at Spanlens and every call is logged with cost, tokens, latency, and full agent traces. No SDK rewrite, no platform migration. Eleven providers supported, plus native Vercel AI SDK, LangChain, and LlamaIndex integrations, and you can query it all from Cursor or Claude Desktop through the bundled MCP server. Self-hostable in one Docker command. MIT.

Why it exists. I shipped an LLM app on OpenAI and Gemini and hit a wall. The provider dashboards showed total spend and nothing else. I could not tell which feature burned the most tokens, which model was cheapest per task, or what each endpoint actually cost. Spanlens is the layer I wanted. It turns on in one line, stays off the critical path, and is open source so you can self-host the exact code we run.

โญ If Spanlens is useful to you, please star the repo. It takes a second, and it is the single biggest thing that helps other developers find the project.

Hosted: spanlens.io ยท npm: @spanlens/sdk ยท PyPI: spanlens ยท CLI: @spanlens/cli ยท MCP: @spanlens/mcp-server ยท Status: status.spanlens.io ยท Changelog: spanlens.io/changelog


Spanlens request log: filter every LLM call, then drill into the full prompt, response, cost, latency, and tokens

Live demo (no signup): spanlens.io/demo/requests

One key swap. Every LLM call, observed.

Spanlens dashboard showing anomaly alerts, spend forecast and traffic chart


Why Spanlens?

  • Helicone was acquired and its roadmap is uncertain.
  • Langfuse is powerful but complex to set up and expensive to scale.
  • Spanlens ships the 20% of features that cover 80% of real production needs. You get request log, cost tracking, agent tracing, anomaly detection, PII scanning, and prompt versioning with a clean UI, a two-minute setup, and pricing that doesn't punish growth.
SpanlensLangfuse ProHelicone
Open sourceโœ… MITโœ… MITโœ… MIT
Self-hostableโœ… Docker one-linerโœ…โœ…
Free tier50K req/mo50K events/mo10K req/mo
Team plan (1M req/mo)$149/mo$271/mo~$200/mo
Agent tracingโœ…โœ…โš ๏ธ limited
LLM-as-judge evalsโœ…โœ…โŒ
PII + injection scanโœ…โŒโŒ
Model recommendationsโœ…โŒโŒ
Prompt A/B experimentsโœ…โœ…โŒ

Spanlens Team $149/mo vs Langfuse Pro $271/mo at 1M requests per month

Predictable bills, no quota cliff. Free hits a hard 429 at 50K requests so a runaway loop in dev can't cost you money. Paid plans use a soft limit with authorized overage (Pro: +$8 / 100K, Team: +$5 / 100K) up to a hard cap you control, so a traffic spike charges you fairly instead of dropping requests.

Seats: Free 1 ยท Pro 3 ยท Team 10 ยท Enterprise unlimited. Unlimited projects on every paid tier.

โญ Like where this is going? A star helps more developers find a lightweight, open alternative in a space full of heavy, acquired tools.


โšก Quick start in 30 seconds

TypeScript / JavaScript (Next.js)

Terminal
npx @spanlens/cli init

The wizard:

  1. Installs @spanlens/sdk with your package manager (npm / pnpm / yarn / bun)
  2. Writes SPANLENS_API_KEY to .env.local
  3. Rewrites every new OpenAI({ apiKey, baseURL }) into createOpenAI()

Paste your Spanlens API key once, confirm two prompts, done. Your LLM calls are now flowing through the Spanlens proxy and visible in www.spanlens.io/requests.

Manual TypeScript setup

server.ts
import { createOpenAI } from '@spanlens/sdk/openai'
const openai = createOpenAI()  // reads SPANLENS_API_KEY, uses Spanlens proxy baseURL

Python

Terminal
pip install "spanlens[openai]"
server.ts
from spanlens.integrations.openai import create_openai

client = create_openai()  # reads SPANLENS_API_KEY from env
res = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)

For agent tracing in Python (multi-step, async, tool calls) see the Python SDK README.

Framework integrations

Already using an orchestration framework? Plug Spanlens in as a callback. No code rewrites.

Vercel AI SDK (Next.js / edge friendly)

server.ts
import { SpanlensClient } from '@spanlens/sdk'
import { createSpanlensTracker } from '@spanlens/sdk/vercel-ai'

const tracker = createSpanlensTracker({
  client: new SpanlensClient({ apiKey: process.env.SPANLENS_API_KEY! }),
  modelName: 'gpt-4o',
})

await generateText({
  model: openai('gpt-4o'),
  messages,
  onStepFinish: tracker.onStepFinish,
  onFinish: tracker.onFinish,
})

LangChain JS / LangGraph

server.ts
import { createSpanlensCallbackHandler } from '@spanlens/sdk/langchain'

const handler = createSpanlensCallbackHandler({ client })
await chain.invoke({ input }, { callbacks: [handler] })   // LangChain
await graph.invoke({ input }, { callbacks: [handler] })   // LangGraph

LlamaIndex TS

server.ts
import { Settings } from 'llamaindex'
import { registerSpanlensCallbacks } from '@spanlens/sdk/llamaindex'

const unregister = registerSpanlensCallbacks(Settings, { client })
// ... run queries ... unregister() on shutdown

Python: LangChain โ€” from spanlens.integrations.langchain import SpanlensCallbackHandler. Same BaseCallbackHandler contract, works with chains, LCEL, and LangGraph.

More integrations: AWS Bedrock, CrewAI, Flowise, Instructor, LlamaIndex, OpenAI Assistants, MCP server. Full setup walkthroughs at spanlens.io/docs/integrations.

Ollama (local LLMs) โ€” Ollama runs on your machine, so it does not go through the hosted proxy. Get a ready client with createOllama() and wrap each call with observeOllama() so the span is logged and tagged as Ollama.

server.ts
import { SpanlensClient } from '@spanlens/sdk'
import { createOllama, observeOllama } from '@spanlens/sdk/ollama'

const spanlens = new SpanlensClient({ apiKey: process.env.SPANLENS_API_KEY! })
const ollama = createOllama() // points at http://localhost:11434/v1

const trace = spanlens.startTrace({ name: 'chat' })
const res = await observeOllama(trace, 'chat', (headers) =>
  ollama.chat.completions.create(
    { model: 'llama3.1', messages: [{ role: 'user', content: 'Hello' }] },
    { headers },
  ),
)
await trace.end({ status: 'completed' })

What you see

Spanlens request log showing every LLM call with latency, cost, tokens and status

Every request logged with model, provider, latency, tokens, cost, and full prompt + response body. Filter, search, export. Streaming responses reconstructed automatically.


What you get

FeatureDescription
Request logEvery LLM call logged with model, tokens, cost, latency, and full request/response body (streaming reconstructed too)
Agent tracingMulti-step workflows as Gantt waterfall span trees with Critical Path highlighted (the longest dependency chain across a fan-out, not just the slowest single span), plus a node-and-edge graph topology view for LangChain / LangGraph callback traces
Cost trackingPer-request cost breakdown with daily rollups and budget alerts. Prompt-cache tokens (cache_read / cache_creation on Anthropic, prompt_tokens_details.cached_tokens on OpenAI) are parsed separately and billed at the discounted rate so you can see actual cache savings, not just sticker price
Per-end-user analyticsTag calls with x-spanlens-user (SDK: withUser() / with_user()) and the /users page shows per-user cost, tokens, errors, models, last seen
Anomaly detection3ฯƒ deviations in latency, cost, or error rate vs. your 7-day baseline, with root-cause hints (token delta, HTTP status breakdown)
AlertsThreshold rules on budget, error rate, and p95 latency. Delivered via Email (Resend), Slack, or Discord webhooks. Evaluated on a 15-minute cron with at-least-once delivery
PII + prompt-injection scanRegex-based detection on request and response bodies; optional per-project blocking (422) for injections; instant alert emails to workspace owner
Savings (model recommendations)The /savings dashboard surfaces calls that match a cheaper model's profile ("Your gpt-4o calls look like classification. Try gpt-4o-mini") with estimated monthly savings. A month-to-date prompt-caching savings card shows the USD you did not pay thanks to discounted cache-read tokens
Response cachingOpt in per request with x-spanlens-cache: true (or a TTL in seconds, capped at 24h; SDK: withCache()). An exact-match hit on the same request body returns the stored response without calling the provider, logs the row at zero cost, and is scoped per API key so nothing leaks across keys. Non-streaming, 200-only
Email digests & health alertsA weekly workspace digest (requests, cost with week-over-week change, top models, anomalies) lands every Monday, and a data-silence alert emails admins when a workspace that was sending traffic suddenly goes quiet for 24 hours, so a broken key or dropped env var is caught before it becomes silent churn
Prompt versioning + A/BRegister prompt templates, run traffic-split experiments, compare versions side by side on latency / cost / error rate โ€” reported with Welch's t-test on latency and cost plus a z-test on error rate, so you get statistical significance rather than just averages
Prompts PlaygroundExecute any prompt version with variable injection directly in the dashboard to see real cost and response before shipping
DatasetsReusable (input, expected_output) test sets you can rerun against any prompt version or model. Upload CSV / JSONL files directly from the dashboard or POST programmatically. Powers offline evals and regression checks
Evals & ExperimentsBuild LLM-as-judge evaluators (judge with OpenAI, Anthropic, or Gemini โ€” pick the cheapest/best for the criterion) with rubric anchors and confidence intervals on pass rates. Supports pairwise A vs B mode for head-to-head prompt comparison, agent trajectory mode for scoring whole traces (not just final text), and judge-result caching keyed by (evaluator, response) to skip duplicate LLM calls on re-runs. Human annotation is queued for sampling, with Pearson r (numeric) or Cohen's ฮบ (categorical) measuring judge-human agreement
OpenAPI 3.0 spec + Swagger UIMachine-readable spec at GET /api/v1/openapi.json and interactive explorer at GET /api/v1/docs. A drift test enforces that every router stays documented
Saved filtersPin frequently used request-log queries (model, status, cost range, tags) and share them across the workspace
Outbound webhooksSubscribe to request.created / trace.completed / alert.triggered events. Payloads are HMAC-signed via X-Spanlens-Signature: sha256=โ€ฆ so receivers can verify origin
OpenTelemetry / OTLP ingestPOST /v1/traces accepts OTLP/HTTP JSON exports using the gen_ai.* semantic conventions, so you can drop in any OTel SDK without writing Spanlens-specific code
Provider-key securityWeekly digest emails for stale (unused 90d+) provider keys + daily GitGuardian leak scan against your active keys, with per-key scan history
Privacy controlsPer-request x-spanlens-log-body: full | meta | none header lets customers shrink what Spanlens stores (drop bodies, drop end-user IDs) without dropping the request itself
Data exportCSV or JSON download for requests, traces, anomalies, and flagged security events (GET /api/v1/exports/{requests,traces,anomalies,security}?format=csv). Streamed server-side for 100K+ row pulls so big exports don't OOM

Team & workspaces

Spanlens is multi-user out of the box. Invite teammates, hand out roles, and spin up a separate workspace per client.

  • Roles are admin (members + billing), editor (data + settings), and viewer (read-only). The last admin is protected against demotion / removal.
  • Email invitations have a 7-day expiry with sha256-hashed tokens. Sent via Resend when RESEND_API_KEY is set; falls back to console-logging the accept URL for local dev.
  • The pending-invitation banner surfaces unaccepted invites at the top of the dashboard, even if the recipient never opened the email. Accept joins and auto-switches the active workspace; Decline removes the row.
  • Multi-workspace lets you switch between workspaces from the sidebar (sb-ws cookie + hard reload so middleware re-resolves scope). Useful for consultants juggling multiple clients or one team running prod / staging as separate workspaces.
  • Two-step onboarding sends new signups to /onboarding: name your workspace, answer two optional survey questions, done. Invitees get a short-circuited variant where Accept skips workspace creation entirely.
  • The audit log (Settings โ†’ Audit log) records every membership / role / invitation event with actor + timestamp.

Monorepo structure

Code
Spanlens/
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ web/             โ€” Next.js 16 dashboard (www.spanlens.io)
โ”‚   โ””โ”€โ”€ server/          โ€” Hono LLM proxy + REST API (api.spanlens.io)
โ”œโ”€โ”€ packages/
โ”‚   โ”œโ”€โ”€ sdk/             โ€” @spanlens/sdk:  TypeScript / JavaScript SDK
โ”‚   โ”œโ”€โ”€ sdk-python/      โ€” spanlens (PyPI): Python SDK
โ”‚   โ”œโ”€โ”€ cli/             โ€” @spanlens/cli:  npx wizard for 1-command setup
โ”‚   โ””โ”€โ”€ mcp-server/      โ€” @spanlens/mcp-server: MCP server for Cursor / Claude Desktop / Continue
โ”œโ”€โ”€ clickhouse/
โ”‚   โ”œโ”€โ”€ migrations/      โ€” ClickHouse schema for the `requests` log table
โ”‚   โ””โ”€โ”€ apply.ts         โ€” `pnpm ch:migrate` runner (idempotent)
โ””โ”€โ”€ supabase/
    โ”œโ”€โ”€ migrations/      โ€” Postgres schema (orgs, projects, keys, prompts, โ€ฆ โ€” RLS-gated)
    โ””โ”€โ”€ seeds/           โ€” model_prices.sql etc.

Storage split

Spanlens uses two databases, each for what it's good at.

Supabase (Postgres) handles transactional, relational, RLS-gated data: organizations, projects, members, API + provider keys, prompts, datasets, alerts, billing, audit log.

ClickHouse handles the high-volume append-only requests table (every LLM call). All reads go through apps/server/src/lib/requests-query.ts, which auto-injects the organization_id filter and the per-plan retention window (free=14d / pro=90d / team=365d). If ClickHouse is briefly unreachable, the proxy falls back to a Supabase queue (requests_fallback) that a cron replays every 5 minutes with no log loss.

Projects, unified keys, and headers

  • A workspace can hold multiple projects (e.g. dev / staging / prod, or one per app). Each project gets its own quota slice, provider keys, and prompt namespace.
  • Unified API keys give you one sl_live_* key per project that is provider-agnostic. Spanlens infers the provider from the request path (/proxy/openai/*, /proxy/anthropic/*, /proxy/gemini/*, /proxy/mistral/*, /proxy/openrouter/*, /proxy/groq/*, /proxy/deepseek/*, /proxy/xai/*, /proxy/cohere/*, /proxy/azure/*), so you only need one Spanlens key even if you call multiple model vendors.
  • X-Spanlens-* headers (set automatically by the SDK helpers withUser(), withSession(), withPromptVersion(), withLogBody()): tag a request with end-user / session IDs, link it to a prompt-version experiment, or limit how much body Spanlens stores. Full list in /docs/proxy.
  • Streaming safety ensures proxy responses are gracefully closed at 290s with a truncated=true flag in the log, so long streams never silently disappear.

Local development

Prerequisites: Node 20+, pnpm 10.33.0+, Docker (for local Supabase), Vercel CLI optional.

bash
# 1. Clone + install
git clone https://github.com/spanlens/Spanlens.git
cd Spanlens
pnpm install

# 2. Start local Supabase + ClickHouse (both require Docker)
supabase start
supabase db push        # apply Postgres migrations
supabase gen types --lang typescript --local > supabase/types.ts

docker compose up -d clickhouse   # start ClickHouse only (web/server run from pnpm dev)
pnpm ch:migrate                   # apply ClickHouse migrations

# 3. Env vars (see apps/server/.env.example)
cp apps/server/.env.example apps/server/.env

# 4. Run everything (web on :3000, server on :3001)
pnpm dev

Running tests + lint

bash
pnpm typecheck          # TS across all packages
pnpm lint               # ESLint
pnpm test               # Vitest โ€” server + sdk + cli suites
pnpm build              # production build smoke test

See CLAUDE.md for architecture rules and Known Gotchas (streaming, RLS, Paddle billing, Vercel Edge runtime, npm publish).


Self-hosting

The easiest way to self-host is with the included docker-compose.yml. It runs the dashboard (web), the proxy/API server, and a local ClickHouse instance together using pre-built images from GHCR.

Run Spanlens in your own VPC with one Docker command

1. Apply the Supabase schema (one-time)

Open your Supabase project โ†’ SQL Editor โ†’ New query, paste the contents of supabase/init.sql, and click Run. That's it. No CLI needed.

Alternative (psql):

bash
psql "postgresql://postgres:<password>@db.<ref>.supabase.co:5432/postgres" \
  -f supabase/init.sql

2. Create a .env file

bash
# Supabase (cloud or self-hosted)
NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...

# Encryption key (generate with: openssl rand -base64 32)
ENCRYPTION_KEY=<32-byte base64>

# Random secret for cron endpoint
CRON_SECRET=<random string>

# ClickHouse (request logs, required)
CLICKHOUSE_URL=http://clickhouse:8123        # the in-network service from docker-compose
CLICKHOUSE_USER=spanlens
CLICKHOUSE_PASSWORD=<choose a strong password>
CLICKHOUSE_DB=spanlens

# Optional (for invite emails)
# WEB_URL=https://your-domain.com
# RESEND_API_KEY=re_...
# RESEND_FROM=Spanlens <no-reply@your-domain.com>

# Optional (Paddle billing, only if you sell paid plans on your instance)
# PADDLE_API_KEY=...
# PADDLE_NOTIFICATION_SECRET=...
# PADDLE_ENVIRONMENT=sandbox  # or production

3. Start

Terminal
docker compose up -d
pnpm ch:migrate                # one-time: apply ClickHouse schema (requests table)
  • Dashboard: http://localhost:3000
  • API / proxy: http://localhost:3001
  • ClickHouse HTTP: http://localhost:8123
  • Health: GET /health (liveness) and GET /health/deep (ClickHouse + fallback queue depth)

The web container passes NEXT_PUBLIC_* vars as build arguments (Next.js bakes them into the client bundle), so they must be present before docker compose build.

Server-only (no dashboard)

If you only need the proxy/API and run the dashboard separately:

Terminal
docker pull ghcr.io/spanlens/spanlens-server:latest
docker run -p 3001:3001 \
  -e SUPABASE_URL=... \
  -e SUPABASE_ANON_KEY=... \
  -e SUPABASE_SERVICE_ROLE_KEY=... \
  -e ENCRYPTION_KEY=... \
  ghcr.io/spanlens/spanlens-server:latest

Point your SDK at your self-hosted URL

server.ts
const openai = createOpenAI({
  baseURL: 'https://your-spanlens.example.com/proxy/openai/v1',
})

Your Spanlens instance talks to your Supabase + ClickHouse. We never see your data.

Background jobs (Vercel Cron / your scheduler)

The hosted instance ships with the following cron tasks (see apps/server/vercel.json). On self-host, point any scheduler at the same paths with the CRON_SECRET bearer:

PathSchedulePurpose
/cron/evaluate-alertsevery 15mEvaluate threshold + anomaly alerts, fire notifications
/cron/snapshot-anomaliesdaily 01:00Materialize daily anomaly baselines
/cron/replay-fallbackevery 5mReplay requests_fallback queue into ClickHouse
/cron/stale-key-remindersweekly Mon 09:00Email digest of idle provider keys
/cron/leak-detect-keysdaily 04:00GitGuardian scan of active provider keys
/cron/recommend-savings-alertsdaily 09:00Email model-swap savings opportunities
/cron/check-past-due-downgradesdaily 10:00D-3 / D-1 warnings + auto-downgrade past-due subs
/cron/execute-pending-deletionsevery 6hHard-delete accounts past their 30-day soft-delete grace
/cron/run-background-migrationsevery 5mDrain background-migration queue (data backfills)
/cron/events-reconciliationdaily 02:00Reconcile OTLP events dual-write between Supabase and ClickHouse
/cron/detect-missing-model-priceshourlyCatch new model IDs in the request log that have no row in model_prices
/cron/self-monitorhourly :31Spanlens dogfoods itself โ€” heartbeat eval into the internal workspace
/cron/detect-orphan-spanshourly :17Flag spans whose parent trace never arrived
/cron/prune-judge-cachedaily 03:00TTL-evict stale (evaluator, response) judge cache entries
/cron/purge-proxy-cachedaily 03:15Reclaim expired proxy_response_cache rows for keys that went quiet
/cron/weekly-digestweekly Mon 09:00Email each workspace a weekly summary (requests, cost trend, top models, anomalies)
/cron/detect-data-silenceevery 6hAlert admins when a previously-active workspace stops sending data for 24h
/cron/keep-warmevery 5mLightweight ping that keeps the Vercel function warm (skip on always-on platforms like Fly.io / Railway)

Contributing

PRs and issues welcome. See CONTRIBUTING.md for the project layout, local-dev setup, coding conventions, and what we look for in a PR. Commit messages follow Conventional Commits and the PR template walks through the safety checklist.

Security issues: please email support@spanlens.io instead of opening a public issue. See SECURITY.md.

License

MIT. Use, fork, self-host, or build on top freely. The hosted service at spanlens.io is the recommended way to run Spanlens, but you can always pull the Docker image and run it yourself (see docs/self-host).

Related MCP Servers

View all alternatives

Frequently Asked Questions about Spanlens

What is the Spanlens MCP server used for?

Query your Spanlens LLM observability from any MCP client. 7 read tools for request logs, agent traces, cost stats, anomalies, model-savings, and per-user analytics across OpenAI, Anthropic, and Gemini. Open source, self-hostable. npx -y @spanlens/mcp-server

How do I install Spanlens in Claude Desktop or Cursor?

Copy the client configuration JSON snippet from the installation section above into your claude_desktop_config.json or .cursor/mcp.json file, then restart your AI application.

Is the Spanlens MCP server free and safe to use?

Yes, Spanlens is listed as a free Model Context Protocol server. Always review repository source code and permissions before granting local workspace access to AI agents.

Technical Specs & Signals

TransportSTDIO
RuntimeNode.js
Health CheckActive
Views0
Installs0
GitHub stars11
45Quality signal: Fair ยท 45/100How this signal is calculated โ–พ
Server availabilityNot measured

Not scored for repo-hosted servers โ€” we can't reach the running server, only its GitHub page. Hosted MCP endpoints are health-checked live.

Verified ownership8/20
Documentation & tools23/30
Adoption3/15
Community engagement0/10

A guidance signal from public completeness & health data โ€” not a user rating. New listings start lower and rise as they add docs, get verified, and grow adoption. Signals we can't observe for a listing are skipped, not counted against it.

โ˜… FeaturedMoxie Docs MCP logo

Moxie Docs MCP

MCP & Agent Skills for Automated Documentation, and codebase conventions + context

Explore Server โ†’

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Free dofollow backlink: after claiming, verify your product site and place a dofollow AllMCPs badge โ€” we recheck it stays live.

Claim & get free dofollow

Promote this listing

Optional paid placement. Free listings stay free forever.

Featured boost7 days in the spotlight ยท from $12/wk
Weeks
1

โ†’ Runs until Aug 14, 2026

Category sponsorTop-of-category sponsorship ยท from $18/wk
Weeks
1

โ†’ Runs until Aug 14, 2026

Cancel anytime โ€” no long-term lock-in.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.