# MCP server

> Connect an AI assistant to Dubai Setup Index: 16 read-only tools over UAE free zones, the Dubai mainland route, business activities and setup cost estimates.

- Canonical: https://dubaisetupindex.com/docs/mcp

## Connect

Give your client this URL. It discovers the authorization server from the endpoint's protected-resource metadata, registers itself, and sends you here to sign in and approve. Streamable HTTP; server version 1.0.0.

```
https://dubaisetupindex.com/api/mcp
```

- Claude: Customize → Connectors → Add custom connector, and paste this URL.
- Claude Code: claude mcp add --transport http dubai-setup-index https://dubaisetupindex.com/api/mcp
- A stdio-only client: npx mcp-remote https://dubaisetupindex.com/api/mcp
- A client that takes a JSON config:

```
{
  "mcpServers": {
    "dubai-setup-index": {
      "type": "http",
      "url": "https://dubaisetupindex.com/api/mcp"
    }
  }
}
```

## Authorization

Every request is authenticated with OAuth 2.1, including initialize, so a client authorizes once when it connects and every tool works from the first call. Dynamic client registration is open: the client registers itself, and you sign in with an emailed link or code and approve one consent screen. No API key is issued.

- Protected resource metadata: https://dubaisetupindex.com/.well-known/oauth-protected-resource
- Authorization server metadata: https://dubaisetupindex.com/.well-known/oauth-authorization-server
- Scope: mcp:read — read-only access to public data.
- Rate limit: 120 requests per minute per account, reported in RateLimit-* headers.

## Tools

Every tool is read-only. Unknown facts come back as unknown, never estimated; estimators refuse configurations they have no evidence for.

| Tool | What it does | Arguments |
| :--- | :--- | :--- |
| search | Find a UAE free zone, a business activity, a route comparison or a country guide by name or plain words, and get the id to fetch and the typed tool that holds its facts. Start here when you do not know the slug. Every hit links to a page that exists. | query: string, 2–80; limit?: integer, 1–20, default 8 |
| fetch | Retrieve a full page by a search hit's id or any URL on this site, as markdown: the same rendition the URL itself serves, so a quote from it and from the page cannot differ. Covers every page, including the how-it-works and methodology prose that no typed tool returns. | id: string, 1–300 |
| list_free_zones | Every UAE free zone covered, one summary row each: emirate, regulator, the published no-visa starting price and the lowest published price. Filter by emirate or price to build a shortlist, then call get_free_zone for each. A starting price is the cheapest published package, not a full setup total; unpriced zones show an unknown, never a zero. | emirate?: string, 0–40; priced_only?: boolean, default false; max_no_visa_price_aed?: number |
| get_free_zone | Everything published for one free zone: packages and starting prices by visa count and term, setup steps and timing, required documents, licence and facility types, visa options, renewal, nationality rules, sources and known gaps. Unknown facts are returned as unknown with what was checked — do not fill them in. | zone: string, 1–120 |
| get_mainland | The Dubai mainland (DET) route: official Invest in Dubai licence estimate examples and activity scopes, the preparation process, dated third-party provider research by business type, documents, renewal and known gaps. The licence estimate covers licence fees only — rent, visas, approvals and renewal are separate and not totalled. | none |
| search_activities | Match a business description to licensable activities, with which setup lanes list each one (IFZA, Ajman Free Zone, Dubai mainland), whether a third-party approval applies and whether a desk-only setup is possible. Call get_activity for the codes, documents and approvals before relying on one. | query: string, 2–80; lane?: "ifza" \| "afz" \| "ded"; limit?: integer, 1–25, default 10 |
| get_activity | One activity in full: the authority's own description, each lane that lists it with its activity code, licence type, facility and approval requirements and documents, where else it is catalogued, regulation level and the free zone versus mainland guidance. A lane marked not-verified is unverified, not unavailable. | activity: string, 1–120 |
| get_comparison | A side-by-side comparison of two or three routes (ifza-vs-ajman, free-zone-vs-mainland, ifza-vs-dubai-mainland, ajman-vs-dubai-mainland): starting prices by visa count, licence and visa timelines, renewal, licence and facility types, remote setup. Each cell comes from the same source as its guide. Mainland is priced by owners, not visas — compare like with like. | comparison: string, 1–120 |
| get_country_guide | Notes for founders from one country: common motivations, documents to prepare and attest, travel and sequencing, and the activities founders from there often licence. Pair with get_immigration_rules for nationality-specific visa rules. | country: string, 1–120 |
| get_immigration_rules | Federal UAE residence-visa rules that name a nationality, plus those that apply to everyone, each with its status (official, zone guidance or reported) and sources. A reported rule is not yet published by ICP and must be confirmed before applying. | nationality: string, 2–60 |
| estimate_ifza_setup | Itemised IFZA formation cost lines for zero, one or two residence visas and a 1, 2, 3 or 5 year licence, from dated portal figures. Returns a priced subtotal, the lines still unresolved and what is excluded. It is a dated reference estimate, not a quote: selectedTotalAed is null whenever any line is unknown, and insurance, premises and activity-specific costs are never included. | visas?: array, 0–2, default []; licence_years?: 1 \| 2 \| 3 \| 5, default 1 |
| estimate_ifza_five_year | Year-by-year known IFZA costs for five years from formation at confirmed rates: licence and card renewals, visa renewals at months 24 and 48, and every cost still unknown in each year. The five-year figure is a known-components subtotal, never a full total; a zero year is not a free year. | visas?: array, 0–2, default []; licence_years?: 1 \| 2 \| 3 \| 5, default 1 |
| estimate_mainland_licence | The official Invest in Dubai simulator's licence estimate for one of six activities with a one- or two-owner LLC and expat owners: base fee plus the rent assessment. Licence fees only — rent itself, visas, approvals, VAT treatment and renewal are listed as unresolved, never totalled. For any other activity or legal form, say it is not covered. | activity_code: "4690018" \| "6201001" \| "6820004" \| "6920003" \| "7020003" \| "7320002"; owners: 1 \| 2; annual_rent_aed: number, 0–10000000; route?: "normal" \| "instant" |
| get_setup_chooser | The three-question decision tree the site uses to narrow routes (UAE clients, Dubai address, visa count) with where each answer leads. A result is a starting point to investigate, not confirmed eligibility. | none |
| get_methodology | How every figure is classified, dated and gated, with current coverage counts and the official sources behind them. Read before explaining what a figure means or how current it is. | none |
| whoami | The authenticated account, the scopes this token carries and the rate limit. Account details only; no setup data. | none |

## Resources

| URI | Type | Contents |
| :--- | :--- | :--- |
| dsi://skill | text/markdown | Skill document. When to reach for this directory, how to call it, and the rules for quoting a figure. |
| dsi://methodology | text/markdown | Methodology. How every figure is classified, dated and gated, as markdown. |
| dsi://coverage | application/json | Coverage. What the directory currently covers: zones, prices, activities and official sources, with dates. |
| dsi://free-zones | application/json | Free zone index. Every free zone with its emirate and published starting price, as JSON. |

## Prompts

| Prompt | Arguments | What it does |
| :--- | :--- | :--- |
| shortlist_free_zones | business, visas? | Shortlists free zones for a business: confirms the activity is listed, compares like-for-like starting prices at the same visa count and term, and names every unknown cost before recommending. |
| free_zone_vs_mainland | business | Frames the free zone versus Dubai mainland decision from where clients are, premises needs and visas, and refuses to compare a mainland licence-only estimate against an all-in package as if they were the same thing. |
| estimate_my_setup | route, visas? | Builds a setup estimate from the evidenced estimators only, and lists every unresolved and excluded cost alongside the priced subtotal. |
| cite_figure | url | Emits the citation format this directory publishes for a page. |

## Related

- [llms.txt](https://dubaisetupindex.com/llms.txt)
- [Skill](https://dubaisetupindex.com/skill.md)
- [OpenAPI](https://dubaisetupindex.com/openapi.json)
