content-contracts-mcp-server
# content-contracts-mcp-server
[](https://github.com/MauricioPerera/content-contracts-mcp-server/actions/workflows/test.yml)
MCP server que expone como *tools* la validación de los protocolos de
["content contracts"](https://github.com/MauricioPerera/seo-md) —
SEO.md, PRODUCTHUNT.md, LINKEDIN.md — para que cualquier agente pueda
verificar contenido generado por IA contra reglas duras concretas, sin
tener que clonar/mantener los linters de referencia él mismo.
Mismo patrón que el protocolo del que viene: un techo/piso duro
verificable + prosa, nunca piso duro por presencia literal — evita el
keyword stuffing sin sacrificar la posibilidad de verificar el contenido
de forma automática. Ver el repo del protocolo para el razonamiento
completo de cada regla.
## Por qué existe
El protocolo (SEO.md/PRODUCTHUNT.md/LINKEDIN.md + los linters de
referencia en Node) es open source y gratis — pero un equipo que genera
contenido con IA a escala no quiere clonar 3 repos y mantener su propia
copia del linter actualizada. Este server es esa capa: los mismos 4
tools de validación, disponibles por MCP para que cualquier agente
(Claude, u otro cliente MCP) los llame directo, sin filesystem
compartido — el config y el contenido viajan como parámetros del tool
call, no como rutas de archivo.
## Tools
| Tool | Qué valida |
|---|---|
| `lint_web_content` | Páginas HTML contra un `SEO.md` (título/descripción, keywords, links, JSON-LD) |
| `lint_producthunt_post` | Tagline/descripción/galería contra un `PRODUCTHUNT.md` |
| `lint_linkedin_content` | Copy de feed y/o artículo de newsletter contra un `LINKEDIN.md` |
| `export_json_ld` | Genera el `<script type="application/ld+json">` desde `schema:` — templating puro, sin LLM |
Cada tool recibe `config` como el YAML de frontmatter tal cual (el
bloque entre los `---` de tu `.md`), y el contenido a validar como
parámetros estructurados — no rutas de archivo, para que funcione igual
de local que remoto.
## Instalar y correr
```bash
npm install
npm run build
npm start # corre por stdio
```
## Probarlo
```bash
npm test # build + smoke test real: levanta el server como
# subproceso, se conecta como cliente MCP de verdad,
# llama a los 4 tools con fixtures que sabemos que
# pasan/fallan — no son mocks del server.
```
## Usarlo como MCP server
Configuración típica (`claude_desktop_config.json` o equivalente):
```json
{
"mcpServers": {
"content-contracts": {
"command": "node",
"args": ["/ruta/a/content-contracts-mcp-server/dist/index.js"]
}
}
}
```
## Relación con seo-md
Este repo **porta** la lógica de validación de
[seo-md](https://github.com/MauricioPerera/seo-md)
(`src/validators/*.ts` es una traducción a TypeScript de
`lint/*.js`, sin I/O de archivos — recibe contenido en memoria, no
rutas), en vez de depender de él en runtime. Es duplicación deliberada:
`seo-md` es la implementación de referencia mínima para uso local/CLI;
este repo es la capa de servicio, pensada para invocación remota. Un
cambio de regla en el protocolo general debe reflejarse en los dos
lugares — están, a propósito, desacoplados en release.
## Licencia
MIT.
TDQS
Scored across 4 tools
Each tool targets a distinct platform or purpose: web content, Product Hunt posts, LinkedIn content, and JSON-LD export. There is no overlap in what they validate or generate, making selection unambiguous.
All tools follow a consistent verb_noun pattern: lint_* for validation across three different content types, and export_json_ld for generation. The naming is predictable and clearly denotes the action and target.
With exactly 4 tools, the set is well-scoped and avoids redundancy. Each tool covers a necessary function for content contract validation and schema export without excess.
The tool surface fully covers the stated domain: validating against SEO.md, PRODUCTHUNT.md, and LINKEDIN.md, plus generating JSON-LD. There are no obvious missing operations that would cause agent failures or dead ends.