{"serverId":"mcp-registry/ai.example4/xmp4","tools":[{"name":"xmp4_info","fixed":{"name":"xmp4_info","description":"Get detailed information about a symbol in a project.","inputSchema":{"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":null,"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 → proceeds; N → warning lists candidates; 0 → 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":null,"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"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":375,"tokensAfter":375},{"name":"xmp4_search","fixed":{"name":"xmp4_search","description":"Search symbols in a project. Use xmp4_projects first to find the project identifier.","inputSchema":{"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":null,"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 → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry."},"page_size":{"type":"integer","format":"uint32","default":null,"minimum":0,"nullable":true,"description":"Results per page (default 20, max 100)"},"max_results":{"type":"integer","format":"uint","default":null,"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"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":405,"tokensAfter":405},{"name":"xmp4_view","fixed":{"name":"xmp4_view","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":{"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 → proceeds; N → warning lists candidates; 0 → do NOT iterate guesses, call xmp4_projects(query=...) once then retry."},"to_line":{"type":"integer","format":"uint32","default":null,"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":null,"minimum":0,"nullable":true,"description":"Starting line (1-based, default 1)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":341,"tokensAfter":341}],"toolsChanged":3,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}