xmp4 — Semantic code knowledge for your stack
OSS libs in your stack, really used: source, tests, callers. C#, Java, TS, Python, Rust, PHP+.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (2)
- LOWen xmp4_source
- LOWen xmp4_symbol_at
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"xmp4": {
"url": "https://mcp.example4.ai/mcp"
}
}
}Puntos de conexión remotos
https://mcp.example4.ai/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (16)
🟢xmp4_callees(docs, file_path, output_format, page, page_size, ...)
Find direct callees (methods called by) a symbol in a project. Navigate step-by-step by calling xmp4_callees again on interesting results.
Esquema de entrada
{
"type": "object",
"properties": {
"docs": {
"description": "Include docs: none (default) | summary | full (xmp4_info only)",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "File path to disambiguate",
"nullable": true,
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolParams"
}🟢xmp4_callers(docs, file_path, output_format, page, page_size, ...)
Find direct callers of a symbol in a project. Navigate step-by-step by calling xmp4_callers again on interesting results.
Esquema de entrada
{
"type": "object",
"properties": {
"docs": {
"description": "Include docs: none (default) | summary | full (xmp4_info only)",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "File path to disambiguate",
"nullable": true,
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolParams"
}🟢xmp4_deps(output_format, page, page_size, project)
List external dependencies of a project.
Esquema de entrada
{
"type": "object",
"properties": {
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "RepoParams"
}🟢xmp4_grep(case_sensitive, file_glob, file_path, max_results, page, ...)
Server-side regex text search over indexed project source files. Free tier: requires file_path (single file). Premium tier (XMP4_PREMIUM_GREP_WALK=true): allows file_glob multi-file walk. Prefer xmp4_tests_for/xmp4_usages for SCIP symbols — grep is for text not indexed (comments, literals, config keys).
Esquema de entrada
{
"type": "object",
"properties": {
"case_sensitive": {
"description": "If true, search is case-sensitive (default false)",
"nullable": true,
"type": "boolean"
},
"file_glob": {
"description": "Optional file glob for multi-file walk (premium tier). Set XMP4_PREMIUM_GREP_WALK=true to enable.",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "Single-file grep target, repo-relative (e.g. 'src/foo.rs'). Required in free tier.",
"nullable": true,
"type": "string"
},
"max_results": {
"default": null,
"description": "Maximum number of hits to collect before pagination (default 50, max 1000)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"pattern": {
"description": "Regex pattern (case-insensitive by default)",
"type": "string"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"pattern"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "GrepParams"
}🟢xmp4_guide
Usage guide for xmp4 tools — read this first to learn the correct workflow
Esquema de entrada
{
"type": "object",
"properties": {}
}🟢xmp4_hierarchy(docs, file_path, output_format, page, page_size, ...)
Get type hierarchy (base, interfaces, derived) for a symbol in a project.
Esquema de entrada
{
"type": "object",
"properties": {
"docs": {
"description": "Include docs: none (default) | summary | full (xmp4_info only)",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "File path to disambiguate",
"nullable": true,
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolParams"
}🟢xmp4_info(docs, file_path, output_format, page, page_size, ...)
Get detailed information about a symbol in a project.
Esquema de entrada
{
"type": "object",
"properties": {
"docs": {
"description": "Include docs: none (default) | summary | full (xmp4_info only)",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "File path to disambiguate",
"nullable": true,
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolParams"
}🟢xmp4_outline(file_path, output_format, page, page_size, project)
Get outline (all symbols) for a file in a project.
Esquema de entrada
{
"type": "object",
"properties": {
"file_path": {
"description": "File path",
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "OutlineParams"
}🟢xmp4_projects(language, page, page_size, query, repo)
Search and browse projects by language and name. Use this first to discover projects, then use other tools with the repo name.
Esquema de entrada
{
"type": "object",
"properties": {
"language": {
"description": "Filter by language (e.g., Python, TypeScript, CSharp)",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"query": {
"description": "Search by project name (case-insensitive contains)",
"nullable": true,
"type": "string"
},
"repo": {
"description": "Filter by repository name",
"nullable": true,
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ProjectsParams"
}🟢xmp4_search(kind, max_results, output_format, page, page_size, ...)
Search symbols in a project. Use xmp4_projects first to find the project identifier.
Esquema de entrada
{
"type": "object",
"properties": {
"kind": {
"description": "Filter by kind: Class, Method, Function, etc.",
"nullable": true,
"type": "string"
},
"max_results": {
"default": null,
"description": "Maximum results to return (default: 50). Kept as per-page upper bound alongside page_size.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"query": {
"description": "Search query (symbol name or pattern)",
"type": "string"
}
},
"required": [
"project",
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SearchParams"
}🟢xmp4_server
Get server information, version, and capabilities
Esquema de entrada
{
"type": "object",
"properties": {}
}🟢xmp4_source(docs, file_path, output_format, page, page_size, ...)
Extract source code for a symbol in a project.
Esquema de entrada
{
"type": "object",
"properties": {
"docs": {
"description": "Include docs: none (default) | summary | full (xmp4_info only)",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "File path to disambiguate",
"nullable": true,
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolParams"
}🟢xmp4_symbol_at(column, file_path, line, project)
LSP-style position→symbol lookup. Given (file_path, line, column) returns the symbol whose occurrence covers that cursor position. line is 1-based; column is 0-based. Use after xmp4_outline/xmp4_view when you know coordinates and want the canonical symbol.
Esquema de entrada
{
"type": "object",
"properties": {
"column": {
"default": null,
"description": "Column number (0-based, default 0 = beginning of line)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"file_path": {
"description": "File path inside the project, relative to repo root",
"type": "string"
},
"line": {
"default": null,
"description": "Line number (1-based)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolAtParams"
}🟢xmp4_tests_for(docs, file_path, output_format, page, page_size, ...)
Find direct tests that exercise a given symbol (direct callers filtered to test-file candidates per language pattern: CSharp/Java/PHP: *Test(s).<ext>; Python: test_*.py / *_test.py; TypeScript/JavaScript: *.spec/test.{ts,js}; Rust: *_tests.rs / tests/; etc.).
Esquema de entrada
{
"type": "object",
"properties": {
"docs": {
"description": "Include docs: none (default) | summary | full (xmp4_info only)",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "File path to disambiguate",
"nullable": true,
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolParams"
}🟢xmp4_usages(docs, file_path, output_format, page, page_size, ...)
Find all usages/references of a symbol in a project.
Esquema de entrada
{
"type": "object",
"properties": {
"docs": {
"description": "Include docs: none (default) | summary | full (xmp4_info only)",
"nullable": true,
"type": "string"
},
"file_path": {
"description": "File path to disambiguate",
"nullable": true,
"type": "string"
},
"output_format": {
"description": "Output format: Compact (default) or Verbose",
"nullable": true,
"type": "string"
},
"page": {
"default": null,
"description": "Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"page_size": {
"default": null,
"description": "Results per page (default 20, max 100)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SymbolParams"
}🟢xmp4_view(file_path, from_line, project, to_line)
Read a raw file excerpt from an indexed project by line range. Use after xmp4_search/xmp4_outline locates the region of interest, or to expand a truncated xmp4_source snippet. Hard cap of 500 lines per call.
Esquema de entrada
{
"type": "object",
"properties": {
"file_path": {
"description": "File path inside the project, relative to repo root",
"type": "string"
},
"from_line": {
"default": null,
"description": "Starting line (1-based, default 1)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"project": {
"description": "Project id: 'repo/project' or 'repo/project/language'. Case-insensitive prefix match. Append '/Python'|'/CSharp'|'/Java'|etc. only to disambiguate multi-language projects (e.g. 'django/Django/Python' vs 'django/Django/JavaScript'). 1 match → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"to_line": {
"default": null,
"description": "Ending line (inclusive, default from_line+49, hard cap 500 lines per call)",
"format": "uint32",
"minimum": 0,
"nullable": true,
"type": "integer"
}
},
"required": [
"project",
"file_path"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ViewParams"
}Prompts recomendados
xmp4_searchxmp4_searchComunidad
Evidencia