MCP Server

xmp4 — Semantic code knowledge for your stack

ai.example4/xmp4
Developer Tools Knowledge & Documentation Public & reachable MCP 2026-07-28

What this MCP does

Provides semantic knowledge of open-source libraries, including source code, tests, and callers.

xmp4_callees
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', 'title': 'SymbolParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'symbol_name'], 'properties': {'docs': {'type': 'string', 'nullable': True, 'description': 'Include docs: none (default) | summary | full (xmp4_info only)'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'nullable': True, 'description': 'File path to disambiguate'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'symbol_name': {'type': 'string', 'description': 'Symbol name'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_callers
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', 'title': 'SymbolParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'symbol_name'], 'properties': {'docs': {'type': 'string', 'nullable': True, 'description': 'Include docs: none (default) | summary | full (xmp4_info only)'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'nullable': True, 'description': 'File path to disambiguate'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'symbol_name': {'type': 'string', 'description': 'Symbol name'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_deps
List external dependencies of a project.
Input schema
{'type': 'object', 'title': 'RepoParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project'], 'properties': {'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_grep
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', 'title': 'GrepParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'pattern'], 'properties': {'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1)'}, 'pattern': {'type': 'string', 'description': 'Regex pattern (case-insensitive by default)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_glob': {'type': 'string', 'nullable': True, 'description': 'Optional file glob for multi-file walk (premium tier). Set XMP4_PREMIUM_GREP_WALK=true to enable.'}, 'file_path': {'type': 'string', 'nullable': True, 'description': "Single-file grep target, repo-relative (e.g. 'src/foo.rs'). Required in free tier."}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'max_results': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Maximum number of hits to collect before pagination (default 50, max 1000)'}, 'case_sensitive': {'type': 'boolean', 'nullable': True, 'description': 'If true, search is case-sensitive (default false)'}}}
xmp4_guide
Usage guide for xmp4 tools — read this first to learn the correct workflow
Input schema
{'type': 'object', 'properties': {}}
xmp4_hierarchy
Get type hierarchy (base, interfaces, derived) for a symbol in a project.
Input schema
{'type': 'object', 'title': 'SymbolParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'symbol_name'], 'properties': {'docs': {'type': 'string', 'nullable': True, 'description': 'Include docs: none (default) | summary | full (xmp4_info only)'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'nullable': True, 'description': 'File path to disambiguate'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'symbol_name': {'type': 'string', 'description': 'Symbol name'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_info
Get detailed information about a symbol in a project.
Input schema
{'type': 'object', 'title': 'SymbolParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'symbol_name'], 'properties': {'docs': {'type': 'string', 'nullable': True, 'description': 'Include docs: none (default) | summary | full (xmp4_info only)'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'nullable': True, 'description': 'File path to disambiguate'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'symbol_name': {'type': 'string', 'description': 'Symbol name'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_outline
Get outline (all symbols) for a file in a project.
Input schema
{'type': 'object', 'title': 'OutlineParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'file_path'], 'properties': {'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'description': 'File path'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_projects
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', 'title': 'ProjectsParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1)'}, 'repo': {'type': 'string', 'nullable': True, 'description': 'Filter by repository name'}, 'query': {'type': 'string', 'nullable': True, 'description': 'Search by project name (case-insensitive contains)'}, 'language': {'type': 'string', 'nullable': True, 'description': 'Filter by language (e.g., Python, TypeScript, CSharp)'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}}}
xmp4_search
Search symbols in a project. Use xmp4_projects first to find the project identifier.
Input schema
{'type': 'object', 'title': 'SearchParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'query'], 'properties': {'kind': {'type': 'string', 'nullable': True, 'description': 'Filter by kind: Class, Method, Function, etc.'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1)'}, 'query': {'type': 'string', 'description': 'Search query (symbol name or pattern)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'max_results': {'type': 'integer', 'format': 'uint', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Maximum results to return (default: 50). Kept as per-page upper bound alongside page_size.'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_server
Get server information, version, and capabilities
Input schema
{'type': 'object', 'properties': {}}
xmp4_source
Extract source code for a symbol in a project.
Input schema
{'type': 'object', 'title': 'SymbolParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'symbol_name'], 'properties': {'docs': {'type': 'string', 'nullable': True, 'description': 'Include docs: none (default) | summary | full (xmp4_info only)'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'nullable': True, 'description': 'File path to disambiguate'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'symbol_name': {'type': 'string', 'description': 'Symbol name'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_symbol_at
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', 'title': 'SymbolAtParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'file_path'], 'properties': {'line': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Line number (1-based)'}, 'column': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Column number (0-based, default 0 = beginning of line)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'description': 'File path inside the project, relative to repo root'}}}
xmp4_tests_for
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', 'title': 'SymbolParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'symbol_name'], 'properties': {'docs': {'type': 'string', 'nullable': True, 'description': 'Include docs: none (default) | summary | full (xmp4_info only)'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'nullable': True, 'description': 'File path to disambiguate'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'symbol_name': {'type': 'string', 'description': 'Symbol name'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_usages
Find all usages/references of a symbol in a project.
Input schema
{'type': 'object', 'title': 'SymbolParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'symbol_name'], 'properties': {'docs': {'type': 'string', 'nullable': True, 'description': 'Include docs: none (default) | summary | full (xmp4_info only)'}, 'page': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Page number (1-based, default 1; ignored by xmp4_info/xmp4_source)'}, 'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'file_path': {'type': 'string', 'nullable': True, 'description': 'File path to disambiguate'}, 'page_size': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Results per page (default 20, max 100)'}, 'symbol_name': {'type': 'string', 'description': 'Symbol name'}, 'output_format': {'type': 'string', 'nullable': True, 'description': 'Output format: Compact (default) or Verbose'}}}
xmp4_view
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', 'title': 'ViewParams', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project', 'file_path'], 'properties': {'project': {'type': 'string', '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 â\x86\x92 proceeds; N â\x86\x92 warning lists candidates; 0 â\x86\x92 do NOT iterate guesses, call xmp4_projects(query=...) once then retry."}, 'to_line': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Ending line (inclusive, default from_line+49, hard cap 500 lines per call)'}, 'file_path': {'type': 'string', 'description': 'File path inside the project, relative to repo root'}, 'from_line': {'type': 'integer', 'format': 'uint32', 'default': None, 'minimum': 0, 'nullable': True, 'description': 'Starting line (1-based, default 1)'}}}
Added
xmp4_view
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_usages
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_tests_for
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_symbol_at
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_source
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_server
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_search
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_projects
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_outline
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_info
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_hierarchy
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_guide
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_grep
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_deps
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_callers
Sept. 17, 2026, 7:56 a.m.
Added
xmp4_callees
Sept. 17, 2026, 7:56 a.m.