static linter for MCP servers
git clone https://github.com/DLeibner/mcp-surface-lint{
"mcpServers": {
"mcp-surface-lint": {
"command": "node",
"args": ["/path/to/mcp-surface-lint/dist/index.js"]
}
}
}Resumen de MCP Servers
# mcp-surface-lint
Static, design-level linting for MCP tool surfaces. Deterministic, offline, and it never calls an LLM.
This is a monorepo:
| Package | What it is |
| --- | --- |
| [`packages/core`](packages/core) | The linter — 19 rules, the scoring engine, and the `mcplint` CLI (`mcp-surface-lint` on npm). Publishable to npm. |
| [`apps/web`](apps/web) | The hosted playground: paste a `tools/list` dump or point it at a remote MCP URL, get a score and an audit. |
## Quick start
```bash
npm install
npm run build # builds core (the web app imports it)
npm test # every package
npm run dev # the web app on http://localhost:3000
```
The web app runs with no cloud accounts configured: reports are held in memory, rate limiting is off,
and no analytics are sent. Copy `apps/web/.env.example` to `.env.local` to wire up the real services.
See [`DEPLOYMENT.md`](DEPLOYMENT.md) for the production account, migration, publishing, and smoke-test
checklist.
## Releases
Production releases are semver Git tags (bare `X.Y.Z`, no `v` prefix — see `.npmrc`). From a clean
`main` branch:
```bash
npm version patch
# or: npm version minor
# or: npm version major
```
That bumps the root version, runs `preversion` (`npm run typecheck`), then the `version` lifecycle
syncs `mcp-surface-lint` and `@mcplint/web` to the same semver, stages workspace `package.json` files and
`package-lock.json`, commits, and tags. `postversion` pushes the branch and tags to `origin`.
### Advanced: bump one workspace only
When only the web app or CLI changed, you may want a partial bump. The default `version` hook syncs
**all** workspaces to the root version, so partial bumps need `--ignore-scripts` and manual staging:
```bash
npm version patch -w @mcplint/web --include-workspace-root --ignore-scripts
# or: npm version patch -w mcp-surface-lint --include-workspace-root --ignore-scripts
git add package.json apps/*/package.json packages/*/package.json package-lock.json
git commit -m "$(node -p \"require('./package.json').version\")"
git tag "$(node -p \"require('./package.json').version\")"
git push origin HEAD --follow-tags
```
The release tag still follows the root version; deploy always runs, and npm/Registry publication is
skipped when `packages/core` was not bumped.
`npm version` has no `--dry-run`; inspect `npm help version` or run on a throwaway clone before
cutting a real release.
Full runbook: [`DEPLOYMENT.md`](DEPLOYMENT.md).
## The CLI
```bash
npm run mcplint -- --stdio "node dist/server.js"
npm run mcplint -- https://example.com/mcp
npm run mcplint -- snapshot.json
```
See [`packages/core/README.md`](packages/core/README.md) for the full CLI, config, and scoring model,
and [`packages/core/docs/rules.md`](packages/core/docs/rules.md) for the rule catalogue.
## Hosted MCP server
The web app also serves a stateless Streamable HTTP MCP endpoint at `/api/mcp`. It exposes one
read-only tool, `check_mcp_server`, which accepts either a public HTTPS MCP URL (plus optional
headers) or an inline `tools/list` snapshot. The result includes structured composite/category
scores, footprint stats, and findings.
Each protocol request gets a fresh MCP server and transport. Tool inputs and captured schemas are
not written to the report store. See `/install` in the running web app for current Cursor, VS Code,
Claude, Windsurf, and generic client configurations.
## What the web app does and does not do
- **Ingest** is paste-a-dump or connect-to-an-https-URL. It never spawns a process, so stdio servers
are a job for the CLI.
- **Remote capture is SSRF-guarded** ([`apps/web/lib/ssrf.ts`](apps/web/lib/ssrf.ts)): https only, every
resolved address must be public unicast, the socket is pinned to the vetted IP so DNS rebinding
cannot move it, and redirects are re-validated at every hop.
- **Reports are unlisted by default** — an unguessable URL, `noindex`, deleted after 30 days unless
the owner opts them public. Anyone with an unlisted URL can view it.
- **The MCP endpoint is stateless** — unlike the interactive report workflow, it returns a report
directly and does not persist the input, captured schemas, or result.
- **Everything is free.** The `GATE_FINDINGS` flag and `projectReport()` exist so a paid tier *could*
withhold the audit while leaving the score free. It is off, and no billing exists.
Lo que la gente pregunta sobre mcp-surface-lint
¿Qué es DLeibner/mcp-surface-lint?
+
DLeibner/mcp-surface-lint es mcp servers para el ecosistema de Claude AI. static linter for MCP servers Tiene 0 estrellas en GitHub y se actualizó por última vez today.
¿Cómo se instala mcp-surface-lint?
+
Puedes instalar mcp-surface-lint clonando el repositorio (https://github.com/DLeibner/mcp-surface-lint) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar DLeibner/mcp-surface-lint?
+
DLeibner/mcp-surface-lint aún no ha sido auditado por nuestro agente de seguridad. Revisa el repositorio original en GitHub antes de usarlo en producción.
¿Quién mantiene DLeibner/mcp-surface-lint?
+
DLeibner/mcp-surface-lint es mantenido por DLeibner. La última actividad registrada en GitHub es de today, con 1 issues abiertos.
¿Hay alternativas a mcp-surface-lint?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega mcp-surface-lint en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/dleibner-mcp-surface-lint)<a href="https://claudewave.com/repo/dleibner-mcp-surface-lint"><img src="https://claudewave.com/api/badge/dleibner-mcp-surface-lint" alt="Featured on ClaudeWave: DLeibner/mcp-surface-lint" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!