ixr indexa frontmatter YAML de ficheros Markdown en SQLite + FTS5 para poder consultarlos por CLI o por MCP.
- Schemas YAML independientes
- Resolución en cascada:
_schema>schema.ymlde directorio > reglas de config - Fallback a
_untypedpara documentos sin schema - Indexación full e incremental con
git - Query con filtros exactos y full-text search
- MCP server sobre stdio para agentes
El proyecto ya es funcional, pero sigue en evolución. La especificación canónica está en specs/.
- Go 1.23+
- Git, si quieres indexación incremental
go install github.com/kdd/ixr@latestgo build -o ixr .Inicializa el proyecto:
ixr initEso crea:
.ixr/
config.yml
index.db
Ejemplo de .ixr/config.yml:
version: "1"
db_path: .ixr/index.db
schemas:
- schemas/specs.yml
rules:
- glob: "specs/**/*.md"
schema: specsEjemplo de schema schemas/specs.yml:
name: specs
fields:
- name: kind
type: enum
values: [entity, event, business-rule, command, query]
required: true
- name: status
type: enum
values: [draft, review, approved, deprecated]
- name: id
type: stringEjemplo de documento:
---
id: BR-001
kind: business-rule
status: draft
---
Regla de ejemplo.Indexa el proyecto:
ixr index --fullHaz consultas:
ixr query specs kind=business-rule status=draft
ixr query specs --search="ejemplo" --format json
ixr query _untyped title=LooseValida documentos:
ixr validate
ixr validate --strictMira el inventario y el estado del índice:
ixr list-schemas
ixr statsCrea .ixr/, inicializa SQLite y genera config.yml.
Indexa Markdown en SQLite.
--full: fuerza full scan- sin
--full: usa incremental congitcuando puede; si no, cae a full scan
Valida documentos contra el schema resuelto.
- detecta
required, tipos y enums - reporta documentos sin schema como warning
--stricthace que los warnings fallen el comando
Lista los schemas conocidos y sus campos.
Muestra conteos por tabla, último commit indexado, timestamp de indexación y tamaño de la DB.
Consulta el índice.
Ejemplos:
ixr query specs kind=entity
ixr query specs kind=entity --fields _source_path,kind,status
ixr query specs --search="schema" --format json
ixr query _untyped title=LooseOpciones principales:
--format table|json|csv--fields a,b,c--filter field=value--search "texto"--limit N
ixr expone un servidor MCP sobre stdio:
ixr mcpTools disponibles:
ixr_queryixr_listixr_schemasixr_statsixr_validate
Ejemplo mínimo:
{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"ixr_query","arguments":{"schema":"specs","filters":{"kind":"entity"}}}}stringstring[]dateenumbooleannumber
.ixr/ya está en.gitignoreen este repo;index.dbes un artefacto derivado y no conviene comitearlo.- Si actualizas a una versión que añade FTS o cambia estructuras internas, ejecuta
ixr index --fullpara reconstruir el índice. - La búsqueda actual soporta filtros exactos y FTS; no hay paginación ni operadores complejos todavía.
go test ./...
go build ./...Las decisiones y reglas del sistema están documentadas en specs/.