Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [],
"safeguard_count": 1,
"summary": {
"bulk_access_tools": 12,
"capability_distribution": {
"admin": 14,
"delete": 1,
"exec": 14,
"export": 12,
"filesystem": 11,
"read": 16,
"write": 13
},
"destructive_tools": 1,
"egress_tools": 0,
"exec_tools": 14,
"high_risk_tools": 14,
"risk_distribution": {
"critical": 11,
"high": 3,
"low": 2,
"medium": 0
},
"secret_tools": 0,
"tool_count": 16
}
},
"latency_ms": null,
"status": "error"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": true,
"resource_links": false,
"resources": true,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [
"prompts",
"resources"
],
"enabled_count": 2,
"initialize_capability_keys": [
"tools"
]
},
"latency_ms": null,
"status": "warning"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"transport_compliance",
"action_safety",
"server_card"
],
"criteria": {
"action_safety": false,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": false,
"session_resume": true,
"step_up_auth": true,
"tool_surface": true,
"tools_list": true,
"transport_compliance": false
},
"high_risk_tools": 14,
"tool_count": 16,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"connector_replay_probe": {
"details": {
"added_tools": [],
"additive_output_changes": [],
"backward_compatible": true,
"output_breaks": [],
"removed_tools": [],
"required_arg_breaks": [],
"would_break_after_refresh": false
},
"latency_ms": null,
"status": "ok"
},
"determinism_probe": {
"details": {
"attempts": 2,
"baseline_signature": "45b3d4b08336cabfad22fcd8833d1dba369c3e2915ded7dd2b3d9213bc7383d8",
"errors": [],
"matches": 2,
"stable_ratio": 1.0,
"successful": 2
},
"latency_ms": 293.82,
"status": "ok"
},
"initialize": {
"details": {
"headers": {
"content-type": "text/event-stream",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"tools": {}
},
"instructions": "xmp4 \u2014 Code intelligence via SCIP. Step 1: xmp4_projects(language, query) to find projects. Step 2: use the project identifier (e.g. 'requests/requests') with xmp4_search, xmp4_info, xmp4_usages, xmp4_callers, xmp4_source etc.",
"protocolVersion": "2025-03-26",
"serverInfo": {
"name": "xmp4",
"version": "1.2.7"
}
}
},
"url": "https://mcp.example4.ai/mcp"
},
"latency_ms": 101.87,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": false,
"risk_hits": [],
"safe_hits": []
},
"latency_ms": null,
"status": "missing"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Expecting value: line 1 column 1 (char 0)",
"url": "https://mcp.example4.ai/.well-known/oauth-protected-resource"
},
"latency_ms": 199.58,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": true,
"official_peer_count": 1,
"registry_identifier": "ai.example4/xmp4",
"registry_source": "official_registry"
},
"latency_ms": null,
"status": "ok"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/html",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"http_status": 200,
"url": "https://mcp.example4.ai/robots.txt"
},
"latency_ms": 579.83,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"headers": {
"content-type": "text/event-stream",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"http_status": 200,
"payload": {
"id": 3,
"jsonrpc": "2.0",
"result": {
"prompts": []
}
},
"url": "https://mcp.example4.ai/mcp"
},
"latency_ms": 294.22,
"status": "ok"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2025-03-26",
"lag_days": 244,
"latest_known_version": "2025-11-25",
"releases_behind": 2,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": true,
"drift_fields": [],
"metadata_document_count": 2,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": null,
"server_card_version": null
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"headers": {
"content-type": "text/event-stream",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"http_status": 200,
"payload": {
"id": 5,
"jsonrpc": "2.0",
"result": {
"resources": []
}
},
"url": "https://mcp.example4.ai/mcp"
},
"latency_ms": 296.82,
"status": "ok"
},
"server_card": {
"details": {
"error": "Expecting value: line 1 column 1 (char 0)",
"url": "https://mcp.example4.ai/.well-known/mcp/server-card.json"
},
"latency_ms": 973.04,
"status": "error"
},
"session_resume_probe": {
"details": {
"protocol_version": "2025-03-26",
"reason": "no_session_id",
"resume_expected": true,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"added": [],
"changed_outputs": [],
"current_tool_count": 16,
"previous_tool_count": 16,
"removed": [],
"similarity": 1.0
},
"latency_ms": null,
"status": "ok"
},
"tools_list": {
"details": {
"headers": {
"content-type": "text/event-stream",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"http_status": 200,
"payload": {
"id": 2,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Find direct callees (methods called by) a symbol in a project. Navigate step-by-step by calling xmp4_callees again on interesting results.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_callees"
},
{
"description": "Find direct callers of a symbol in a project. Navigate step-by-step by calling xmp4_callers again on interesting results.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_callers"
},
{
"description": "List external dependencies of a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project"
],
"title": "RepoParams",
"type": "object"
},
"name": "xmp4_deps"
},
{
"description": "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 \u2014 grep is for text not indexed (comments, literals, config keys).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"pattern"
],
"title": "GrepParams",
"type": "object"
},
"name": "xmp4_grep"
},
{
"description": "Usage guide for xmp4 tools \u2014 read this first to learn the correct workflow",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "xmp4_guide"
},
{
"description": "Get type hierarchy (base, interfaces, derived) for a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_hierarchy"
},
{
"description": "Get detailed information about a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_info"
},
{
"description": "Get outline (all symbols) for a file in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"title": "OutlineParams",
"type": "object"
},
"name": "xmp4_outline"
},
{
"description": "Search and browse projects by language and name. Use this first to discover projects, then use other tools with the repo name.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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"
}
},
"title": "ProjectsParams",
"type": "object"
},
"name": "xmp4_projects"
},
{
"description": "Search symbols in a project. Use xmp4_projects first to find the project identifier.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 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"
],
"title": "SearchParams",
"type": "object"
},
"name": "xmp4_search"
},
{
"description": "Get server information, version, and capabilities",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "xmp4_server"
},
{
"description": "Extract source code for a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_source"
},
{
"description": "LSP-style position\u2192symbol 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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"title": "SymbolAtParams",
"type": "object"
},
"name": "xmp4_symbol_at"
},
{
"description": "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.).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_tests_for"
},
{
"description": "Find all usages/references of a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_usages"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 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"
],
"title": "ViewParams",
"type": "object"
},
"name": "xmp4_view"
}
]
}
},
"url": "https://mcp.example4.ai/mcp"
},
"latency_ms": 387.28,
"status": "ok"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "text/event-stream",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Find direct callees (methods called by) a symbol in a project. Navigate step-by-step by calling xmp4_callees again on interesting results.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_callees"
},
{
"description": "Find direct callers of a symbol in a project. Navigate step-by-step by calling xmp4_callers again on interesting results.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_callers"
},
{
"description": "List external dependencies of a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project"
],
"title": "RepoParams",
"type": "object"
},
"name": "xmp4_deps"
},
{
"description": "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 \u2014 grep is for text not indexed (comments, literals, config keys).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"pattern"
],
"title": "GrepParams",
"type": "object"
},
"name": "xmp4_grep"
},
{
"description": "Usage guide for xmp4 tools \u2014 read this first to learn the correct workflow",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "xmp4_guide"
},
{
"description": "Get type hierarchy (base, interfaces, derived) for a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_hierarchy"
},
{
"description": "Get detailed information about a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_info"
},
{
"description": "Get outline (all symbols) for a file in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"title": "OutlineParams",
"type": "object"
},
"name": "xmp4_outline"
},
{
"description": "Search and browse projects by language and name. Use this first to discover projects, then use other tools with the repo name.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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"
}
},
"title": "ProjectsParams",
"type": "object"
},
"name": "xmp4_projects"
},
{
"description": "Search symbols in a project. Use xmp4_projects first to find the project identifier.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 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"
],
"title": "SearchParams",
"type": "object"
},
"name": "xmp4_search"
},
{
"description": "Get server information, version, and capabilities",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "xmp4_server"
},
{
"description": "Extract source code for a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_source"
},
{
"description": "LSP-style position\u2192symbol 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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"title": "SymbolAtParams",
"type": "object"
},
"name": "xmp4_symbol_at"
},
{
"description": "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.).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_tests_for"
},
{
"description": "Find all usages/references of a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_usages"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 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"
],
"title": "ViewParams",
"type": "object"
},
"name": "xmp4_view"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
},
"latency_ms": 387.08,
"status": "error"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 200,
"probe_status": "missing"
}
},
"latency_ms": 97.89,
"status": "missing"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Expecting value: line 1 column 1 (char 0)",
"url": "https://mcp.example4.ai/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"server_card": {
"error": "Expecting value: line 1 column 1 (char 0)",
"url": "https://mcp.example4.ai/.well-known/mcp/server-card.json"
},
"transport_compliance_probe": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "text/event-stream",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Find direct callees (methods called by) a symbol in a project. Navigate step-by-step by calling xmp4_callees again on interesting results.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_callees"
},
{
"description": "Find direct callers of a symbol in a project. Navigate step-by-step by calling xmp4_callers again on interesting results.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_callers"
},
{
"description": "List external dependencies of a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project"
],
"title": "RepoParams",
"type": "object"
},
"name": "xmp4_deps"
},
{
"description": "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 \u2014 grep is for text not indexed (comments, literals, config keys).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"pattern"
],
"title": "GrepParams",
"type": "object"
},
"name": "xmp4_grep"
},
{
"description": "Usage guide for xmp4 tools \u2014 read this first to learn the correct workflow",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "xmp4_guide"
},
{
"description": "Get type hierarchy (base, interfaces, derived) for a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_hierarchy"
},
{
"description": "Get detailed information about a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_info"
},
{
"description": "Get outline (all symbols) for a file in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"title": "OutlineParams",
"type": "object"
},
"name": "xmp4_outline"
},
{
"description": "Search and browse projects by language and name. Use this first to discover projects, then use other tools with the repo name.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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"
}
},
"title": "ProjectsParams",
"type": "object"
},
"name": "xmp4_projects"
},
{
"description": "Search symbols in a project. Use xmp4_projects first to find the project identifier.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 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"
],
"title": "SearchParams",
"type": "object"
},
"name": "xmp4_search"
},
{
"description": "Get server information, version, and capabilities",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "xmp4_server"
},
{
"description": "Extract source code for a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_source"
},
{
"description": "LSP-style position\u2192symbol 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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
}
},
"required": [
"project",
"file_path"
],
"title": "SymbolAtParams",
"type": "object"
},
"name": "xmp4_symbol_at"
},
{
"description": "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.).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_tests_for"
},
{
"description": "Find all usages/references of a symbol in a project.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 do NOT iterate guesses, call xmp4_projects(query=...) once then retry.",
"type": "string"
},
"symbol_name": {
"description": "Symbol name",
"type": "string"
}
},
"required": [
"project",
"symbol_name"
],
"title": "SymbolParams",
"type": "object"
},
"name": "xmp4_usages"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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 \u2192 proceeds; N \u2192 warning lists candidates; 0 \u2192 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"
],
"title": "ViewParams",
"type": "object"
},
"name": "xmp4_view"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
}
},
"remote_url": "https://mcp.example4.ai/mcp",
"server_card_payload": null,
"server_identifier": "ai.example4/xmp4"
}