Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Recently observed → Unavailable
Live → Recently observed
Changed the definition of "question_to_map"
⟨21 unchanged words⟩ show total by pincode", "file_key": "mcp-uploads/2026/01/15/<uuid>.csvmcp-uploads/<user-id>/2026/01/15/<uuid>.csv"}. The file_key is reusable — for ⟨313 unchanged words⟩
Added "geocode" and "reverse_geocode" (3 tools before, 5 now)
Geocode addresses from an uploaded CSV or XLSX file into latitude/longitude. Pass a file_key from upload_file. Column selection: if you know it, pass address_column (or address_columns for several). Otherwise the server asks the geo-match service to detect it. When the answer is not unambiguous — several address columns, a weak match, or only structured columns like District/State/PIN that must be combined — the response is status=clarification_required with candidates and ready-to-fire guidance actions. Present the choice to the user and re-call with their answer; never invent a column name…
Turn latitude/longitude coordinates in an uploaded CSV or XLSX into addresses. Pass a file_key from upload_file. Column selection: pass latitude_column and longitude_column, or latlong_column for a single combined column, or coordinate_pairs for several sets. Otherwise the server detects them. When the answer is not unambiguous — several coordinate columns, a weak match, coordinates outside the supported region, or coarse whole-number values — the response is status=clarification_required. Present the choice to the user and re-call with their answer. Results are written back into the upload…
Changed the definition of "question_to_map"
⟨207 unchanged words⟩ district, pincode, rto, city, ac, pc. Points mode: if your file has latitude/longitude columns (e.g. from a prior geocoding step, or coordinates you already had) and your question asks to plot/pin/mark locations ("plot my stores", "show me the outlet locations", "mark these points"), the server detects the coordinate columns automatically and renders markers instead of shaded regions — no geo_column/value_column needed. The boundary lines drawn beneath the markers and how far the map zooms are chosen automatically from where the points actually fall (tightens to a state or district for a local cluster, falls back to all-India for a nationwide spread); you can also name a level explicitly ("plot by assembly constituency", "rto wise") to force it. A response may report points that fall outside every boundary (e.g. offshore or swapped lat/lon) — check for that in the warnings.
Added "upload_file"; removed "create_upload" and "process_upload"; changed the definition of "get_capabilities" and "question_to_map" (4 tools before, 3 now)
Return the server's capability matrix:(supported map types, geo types, output formats,andclassification methods, and the list of tools available in this process (which varies by configuration). Call this first to discover what the server can do.
Render a geographic map froma question. TO MAPyour
Certificate recorded, valid to 2027-03-24
Authorization not required
First tool surface recorded: 4 tools (server version 1.0.0)
Showing the latest 9 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"additionalProperties":false,"properties":{"csv":{"type":"string"},"data":{"items":{"additionalProperties":true," ⟨56 unchanged words⟩ "type":["null","object"]},"file_pathfile_key":{"type":"string"},"geo_column": ⟨15 unchanged words⟩ "additionalProperties":true,"type":"object"},"sheet":{"type":"string"},"state_hint":{"items":{"type":"string" ⟨4 unchanged words⟩ additionalProperties":true,"type":"object"},"table":{"type":"string"},"upload_id":{"type":"string"},"value_column": ⟨6 unchanged words⟩
⟨27 unchanged words⟩ "type":["null","object"]},"clarification":{"additionalProperties":false,"properties":{"columns":{"items":{"additionalProperties":false,"properties":{"class":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type","class"],"type":"object"},"type":["null","array"]},"guidance":{"additionalProperties":false,"properties":{"allow_freeform":{"type":"boolean"},"next_actions":{"items":{"additionalProperties":false,"properties":{"arguments":{"additionalProperties":true,"type":"object"},"arguments_from":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"reason":{"type":"string"},"tool":{"type":"string"}},"required":["id","label","tool"],"type":"object"},"type":["null","array"]},"next_steps_text":{"type":"string"}},"required":["next_actions","allow_freeform","next_steps_text"],"type":["null","object"]},"message":{"type":"string"},"status":{"type":"string"},"suggested_geo_columns":{"items":{"type":"string"},"type":["null","array"]},"suggested_value_columns":{"items":{"type":"string"},"type":["null","array"]}},"required":["status","message","columns","suggested_geo_columns","suggested_value_columns"],"type":["null","object"]},"computed_data":{"additionalProperties":false,"properties":{" ⟨231 unchanged words⟩ "type":["null","object"]},"mime_type":{"type":"string"},"preview_image_base64":{"type":"string"},"render_id":{"type":"string"},"subtitle":{"type":"string"},"svg_url":{"type":"string"},"title":{"type":"string"},"total_count" ⟨18 unchanged words⟩ ,"mode":{"type":"string"},"points_plotted":{"type":"integer"},"points_rejected":{"type":"integer"},"rejected_rows":{"items":{"type":"string"},"type":["null","array"]},"resolution_method":{"type":"string"},"resolved_params" ⟨62 unchanged words⟩ "month_remaining"],"type":["null","object"]},"warnings":{"items":{"type":"string"},"type":["null","array"]}},"required":["mode"],"type":"object"}
Upload a CSV or XLSX file for server-side ingestion under policy (auth, size cap, malware scan, injected-intent scan) and receive a file_key. This is the first step before calling question_to_map with your own data. Step 1: Call upload_file with file_name, file_size, and question. The response contains a signed upload_url and a curl command — run the curl command to POST the file bytes. The curl response contains file_key, columns, a row preview, and optionally 'intent' (geo-match service detected geo_column, geo_level, value_column, map_type, confidence) and 'guidance' (a ready-to-fire ques…
Start a client-direct file upload for large CSV/XLSX files. Returns a presigned put_url and an opaque upload_id. Steps: 1) call create_upload with file_name, 2) HTTP PUT the raw file bytes to put_url using the returned headers, 3) pass upload_id to question_to_map, parse_file, or render_map. Preferred over file_base64 for anything beyond a few KB — the bytes go straight to storage instead of riding inside the tool call.
Validate and ingest a file uploaded via create_upload. Runs size, virus, and content-safety checks, parses CSV/XLSX/JSON, and returns an upload_id plus advisory intent (no raw rows). IMPORTANT: to make a map, call question_to_map and pass this upload_id — and pass the SAME upload_id on every follow-up question about this file (e.g. 'now show it by district'). The response includes a ready-to-use next_actions entry with upload_id already filled in; prefer firing that. Rejects infected or injected files (nothing is kept in that case).