{"server":{"name":"app.marketgenius/mcp","title":"Marketgenius","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://marketgenius.app/mcp","type":"streamable-http"}],"version":"2026-10-18","websiteUrl":"https://marketgenius.app","description":"Our free Marketgenius investment tools as live, interactive React MCP Apps."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-10-18T08:24:42.246014Z","publishedAt":"2026-10-18T08:24:42.246014Z","statusChangedAt":"2026-10-18T08:24:42.246014Z"},"dev.protogrid/connectability":{"class":"unknown","autonomous":false,"human_steps":["unknown"],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://marketgenius.app/mcp","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"unknown","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":[],"stateless":null},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":243,"consecutive_failures":0,"last_probe_at":"2026-10-19T16:38:28.672Z","last_ok_at":"2026-10-19T16:38:28.672Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"mg_calculator_cagr","title":"CAGR Calculator","description":"Open the CAGR Calculator React MCP App UI.\nALWAYS ask first — never call this tool silently:\n\"Open the calculator directly, or pre-fill it with your inputs?\"\n\nIF directly → call this tool now with no params. STOP. Do not ask anything else.\nIF pre-fill → collect only the input schema fields — do not guess or invent field names.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_cagr_state","title":"CAGR Calculator — State","description":"Read the current field values of the open CAGR Calculator.\nCall this before answering any question about the current values —\nthe user may have changed fields manually in the GUI.\nDo not call this on a loop; call it once on demand.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_cagr_sync","title":"CAGR Calculator — Sync","description":"Sync user-entered field values of the open CAGR Calculator back\nto the session store so the model can read them via the state tool.\nCalled by the View after any field change; hidden from the model.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_cagr_update","title":"CAGR Calculator — Update","description":"Update one or more fields in the already-open CAGR Calculator.\nALWAYS call mg_calculator_cagr_state first — the user may have\nchanged values manually in the GUI and you must not overwrite them.\nPass the version you received from that call (or from the open tool\nif updating immediately after opening). Only pass the fields the\nuser explicitly asked to change; omit all others. Send all changes\nin a single call — multiple sequential calls lose intermediate\nupdates (only the last one applies).","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_dividend","title":"Dividend Calculator","description":"Open the Dividend Calculator React MCP App UI.\nALWAYS ask first — never call this tool silently:\n\"Open the calculator directly, or pre-fill it with your inputs?\"\n\nIF directly → call this tool now with no params. STOP. Do not ask anything else.\nIF pre-fill → ask \"By amount invested or by number of shares?\", then collect only the\n  input schema fields matching that mode — do not guess or invent field names.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_dividend_state","title":"Dividend Calculator — State","description":"Read the current field values of the open Dividend Calculator.\nCall this before answering any question about the current values —\nthe user may have changed fields manually in the GUI.\nDo not call this on a loop; call it once on demand.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_dividend_sync","title":"Dividend Calculator — Sync","description":"Sync user-entered field values of the open Dividend Calculator back\nto the session store so the model can read them via the state tool.\nCalled by the View after any field change; hidden from the model.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_dividend_update","title":"Dividend Calculator — Update","description":"Update one or more fields in the already-open Dividend Calculator.\nALWAYS call mg_calculator_dividend_state first — the user may have\nchanged values manually in the GUI and you must not overwrite them.\nPass the version you received from that call (or from the open tool\nif updating immediately after opening). Only pass the fields the\nuser explicitly asked to change; omit all others. Send all changes\nin a single call — multiple sequential calls lose intermediate\nupdates (only the last one applies).","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_market_cap","title":"Market Cap Calculator","description":"Open the Market Cap Calculator React MCP App UI.\nALWAYS ask first — never call this tool silently:\n\"Open the calculator directly, or pre-fill it with your inputs?\"\n\nIF directly → call this tool now with no params. STOP. Do not ask anything else.\nIF pre-fill → ask \"Would you like to pre-fill share price and shares outstanding?\", then collect only the\n  input schema fields matching that mode — do not guess or invent field names.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_market_cap_state","title":"Market Cap Calculator — State","description":"Read the current field values of the open Market Cap Calculator.\nCall this before answering any question about the current values —\nthe user may have changed fields manually in the GUI.\nDo not call this on a loop; call it once on demand.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_market_cap_sync","title":"Market Cap Calculator — Sync","description":"Sync user-entered field values of the open Market Cap Calculator back\nto the session store so the model can read them via the state tool.\nCalled by the View after any field change; hidden from the model.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_market_cap_update","title":"Market Cap Calculator — Update","description":"Update one or more fields in the already-open Market Cap Calculator.\nALWAYS call mg_calculator_market_cap_state first — the user may have\nchanged values manually in the GUI and you must not overwrite them.\nPass the version you received from that call (or from the open tool\nif updating immediately after opening). Only pass the fields the\nuser explicitly asked to change; omit all others. Send all changes\nin a single call — multiple sequential calls lose intermediate\nupdates (only the last one applies).","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_profit_margin","title":"Profit Margin Calculator","description":"Open the Profit Margin Calculator React MCP App UI.\nALWAYS ask first — never call this tool silently:\n\"Open the calculator directly, or pre-fill it with your inputs?\"\n\nIF directly → call this tool now with no params. STOP. Do not ask anything else.\nIF pre-fill → ask \"Would you like to pre-fill revenue and cost?\", then collect only the\n  input schema fields matching that mode — do not guess or invent field names.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_profit_margin_state","title":"Profit Margin Calculator — State","description":"Read the current field values of the open Profit Margin Calculator.\nCall this before answering any question about the current values —\nthe user may have changed fields manually in the GUI.\nDo not call this on a loop; call it once on demand.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_profit_margin_sync","title":"Profit Margin Calculator — Sync","description":"Sync user-entered field values of the open Profit Margin Calculator back\nto the session store so the model can read them via the state tool.\nCalled by the View after any field change; hidden from the model.","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_calculator_profit_margin_update","title":"Profit Margin Calculator — Update","description":"Update one or more fields in the already-open Profit Margin Calculator.\nALWAYS call mg_calculator_profit_margin_state first — the user may have\nchanged values manually in the GUI and you must not overwrite them.\nPass the version you received from that call (or from the open tool\nif updating immediately after opening). Only pass the fields the\nuser explicitly asked to change; omit all others. Send all changes\nin a single call — multiple sequential calls lose intermediate\nupdates (only the last one applies).","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"},{"name":"mg_list","title":"List Marketgenius Tools","description":"List all available Marketgenius tools with their names, descriptions, categories, and resource URIs. Use mg_list to discover what's available, or filter by category. ","annotations":null,"source":"probe","observed_at":"2026-09-20T12:13:49.535Z"}],"dev.protogrid/trust":{"score":83,"components":{"hygiene":80,"liveness":100,"freshness":100,"provenance":55},"drivers":["+dns-namespace","+website","+reachable","+uptime-100%","+updated-1d-ago","-no-repository"],"flags":["no-repository"],"blocked":false,"computed_at":"2026-10-19T19:33:22.947Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":71,"label":"needs work","components":{"auth":null,"hygiene":71,"protocol":null,"stability":null,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"protocol.stateless","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"protocol.transport","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"protocol.list_ttl","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones","status":"fail","category":"hygiene"},{"id":"tools.directory_hints","detail":"no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: mg_calculator_cagr (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); mg_calculator_cagr_update (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); mg_calculator_cagr_sync (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …","status":"fail","category":"hygiene"},{"id":"tools.token_cost","detail":"about 4,868 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"tool history not recorded yet","status":"na","category":"stability"},{"id":"stability.rug_pull","detail":"tool history not recorded yet","status":"na","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["-tools.annotations","-tools.directory_hints"],"flags":[],"tool_count":17,"token_estimate":4868,"tools_hash":null,"tools_changed_at":null,"computed_at":"2026-10-19T19:33:22.949Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"app.marketgenius/mcp","aliases":[],"alias_count":0,"repository_key":null,"owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/app.marketgenius%2Fmcp/tools","arguments":{"name":"app.marketgenius/mcp"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/app.marketgenius%2Fmcp/connection?target=mcpServers","arguments":{"name":"app.marketgenius/mcp","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}