MCP
Upload a file from Claude or ChatGPT
MAIA's MCP connector takes a file you attach in Claude, ChatGPT, or another MCP client, and brings its rows into a MAIA project. MAIA matches the rows to parcels or adds them as a map layer or a table, the same way an upload in the web app does.
What you end with#
You attach a file in the chat and say where its rows go.
You ask
Bring the places in this file into a new MAIA project in San Francisco County.
Your client does the rest. There is no MAIA page to open. When the import finishes, your client reports:
- the link to the project
- how many rows MAIA imported
- how many rows it skipped because they are outside the county
- for addresses, how many rows matched a parcel and how many did not
Before you start#
You need the MAIA connector connected and signed in. See Connect. For a CSV or GeoJSON file, MAIA needs no other setting.
Your client sends the file in one of two ways. MAIA picks the way from the file.
| The file | How it reaches MAIA | What you need |
|---|---|---|
| CSV or GeoJSON, up to 100,000 characters | How it reaches MAIAYour client reads the rows and passes them to MAIA in a tool call | What you needNothing more, in any client |
| Any other format, or a larger file | How it reaches MAIAYour client sends the file to a one-use upload link | What you needA client that can send a file over HTTPS to api.maia-analytics.com |
Claude Code can send a file to an upload link with no setup. Claude on the web and in the desktop app can, after you allow MAIA's domain once, as below. ChatGPT cannot, so in ChatGPT bring in a CSV or GeoJSON file, or save the file as CSV first.
Allow MAIA's domain in Claude#
You need this step only for a file that goes to an upload link. Claude sends that file from its code sandbox. By default, the sandbox reaches only package-manager domains, so Claude cannot reach MAIA until you allow it.
On a Pro or Max plan:
- Open Settings, then Capabilities.
- Under Code execution and file creation, make sure code execution is on, and keep Allow network egress on.
- Under Additional allowed domains, enter
api.maia-analytics.comand choose Add.
Note
On a Claude Team or Enterprise plan, a workspace admin adds api.maia-analytics.com to the organization's allowed domains. Code execution must be on.
If you skip this step, the upload is blocked. Claude tells you which domain to allow and where. Add it, and Claude can try again with the same link.
Bring a file in#
- Attach the file in the chat.
- Say where the rows go: a project you can edit, or a new project in a county you name.
- Wait for the report. Address rows are matched in the background, and your client checks on them until they finish.
A project covers one county. Rows outside that county are skipped, so split a list that spans counties and bring each part into its own project.
What MAIA does with the file#
MAIA picks the route from the file itself, the same way it does for an upload in the web app.
| The file holds | You get |
|---|---|
| Street addresses | You getYour rows matched to parcels |
| Coordinates or shapes | You getA map layer of your own features |
| Anything else | You getA table the agent can read and join |
How MAIA reads a file and matches its addresses is on the File upload page.
Formats and limits#
Through an upload link, the formats and the limits are the same as for an upload in the web app: CSV, TSV, Excel (.xlsx), Parquet, GeoJSON, KML, KMZ, GeoPackage, and zipped Shapefile. Rows passed in a tool call must be CSV or GeoJSON text, up to 100,000 characters.
| Limit | Value |
|---|---|
| Rows passed in a tool call | Value100,000 characters of CSV or GeoJSON |
| File size, through an upload link | Value25 MB |
| Rows, matched to parcels by address | Value1,000 |
| Rows, as a map layer or a table | Value10,000 |
A file with more rows than the limit does not fail. Your client can ask MAIA to import only the first rows that fit. See File formats and Limits.
How the upload works#
- Rows in a tool call. Your client reads the attached file and passes its rows to MAIA as text. They go through the same import as a file upload. Each call imports once, into the project or the county your client names.
- An upload link. Your client asks MAIA for a link, then sends the file to it from its own code environment. The file does not pass through the chat's tool calls. A link works once, expires after 10 minutes, and works only for you, for the project or the county it was made for.
Troubleshooting#
| What you see | Likely cause | What to do |
|---|---|---|
| Claude says the upload was blocked | Likely causeThe file went to an upload link, and api.maia-analytics.com is not an allowed domain | What to doAllow MAIA's domain, then ask Claude to try again. For a CSV, you can also ask Claude to pass the rows in the chat instead |
| Claude cannot run code | Likely causeCode execution is off, and the file needs an upload link | What to doTurn it on under Settings, then Capabilities |
| The file is too large to pass in the chat | Likely causeIt holds more than 100,000 characters | What to doSplit it into smaller files, or use a client that can send a file to an upload link |
| Fewer rows than in the file | Likely causeRows outside the project's county were skipped | What to doCheck the skipped count in the report, and bring those rows into a project in their own county |
| Addresses left unmatched | Likely causeMAIA found no single parcel for them | What to doSee How matching works |
| The link has expired | Likely causeMore than 10 minutes passed, or the link was used | What to doAsk your client to start the upload again |
Tools#
Three tools carry an upload. Your client calls them for you.
| Tool | What it does |
|---|---|
[import_rows](/docs/mcp/tools#import-rows) | What it doesImports rows passed as CSV or GeoJSON text into a project, or into a new project in a county |
[get_upload_link](/docs/mcp/tools#get-upload-link) | What it doesGets a one-use upload link for a project, or for a new project in a county |
[get_import](/docs/mcp/tools#get-import) | What it doesReports an address import: its progress, then the matched and unmatched rows |
Related#
- File upload covers uploads in the web app.
- Runs and approvals covers what to ask MAIA once your rows are in.