xmp4 — Semantic code knowledge for your stack
OSS libs in your stack, really used: source, tests, callers. C#, Java, TS, Python, Rust, PHP+.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (2)
- LOWin xmp4_source
- LOWin xmp4_symbol_at
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"xmp4": {
"url": "https://mcp.example4.ai/mcp"
}
}
}Remote-Endpunkte
https://mcp.example4.ai/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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).
Eingabe-Schema
{
"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
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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
Eingabe-Schema
{
"type": "object",
"properties": {}
}🟢xmp4_source(docs, file_path, output_format, page, page_size, ...)
Extract source code for a symbol in a project.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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.).
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"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"
}Empfohlene Prompts
xmp4_searchxmp4_searchCommunity
Nachweis