xmp4 — Semantic code knowledge for your stack

OSS libs in your stack, really used: source, tests, callers. C#, Java, TS, Python, Rust, PHP+.

Should I use this

Quality & Safety

A
Description quality
88%
Schema completeness
91%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'xmp4_source' description lacks action verbin xmp4_source
  • LOWTool 'xmp4_symbol_at' description lacks action verbin xmp4_symbol_at

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,703Tokens (tool definitions)
~3.0 KBTypical response size
Significant attention impact (3.67% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "xmp4": {
      "url": "https://mcp.example4.ai/mcp"
    }
  }
}

Remote endpoints

https://mcp.example4.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (16)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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.

Input 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.

Input 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.

Input 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).

Input 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

Input 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.

Input 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.

Input 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.

Input 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.

Input 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.

Input 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

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢xmp4_source(docs, file_path, output_format, page, page_size, ...)

Extract source code for a symbol in a project.

Input 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.

Input 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.).

Input 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.

Input 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.

Input 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"
}

Recommended Prompts

search_research
Search for information about [topic] using xmp4 — Semantic code knowledge for your stack
Expected tools: xmp4_search
find_specific
Find [specific item] using xmp4 — Semantic code knowledge for your stack
Expected tools: xmp4_search

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded16 tools
verifiedversion not recorded16 tools