@transita/mcp-server
This server provides immigration eligibility intelligence, helping users discover suitable countries and visa pathways for relocation based on their profile.
Match visas to a profile: Score a user's profile (citizenship, age, education, work experience, income, goal, timeline) against all supported visa pathways and receive top matches ranked by eligibility, with cost, timeline, and links to official sources.
Get full visa details: Retrieve comprehensive information for a specific visa — eligibility requirements, processing time, fees, validity period, PR timeline, and a document checklist preview.
Compare visa pathways: Side-by-side comparison of 2–3 visa options, highlighting the fastest, cheapest, and best PR path with delta summaries.
Country overviews: Get a destination country summary including available visa pathways, EU membership status, score dimensions, drawbacks, top cities with rent ranges, and PR/citizenship timelines.
Search by nationality: Find curated top destinations and best-fit visas for citizens of a given country — ideal for answering "Where should I move?"
Live programme status: Check whether round-based immigration programmes are currently open, including last round date and cutoff score.
Browse resources: Access the full active visa catalogue (
transita://visas), destination country list (transita://countries), and nationality-specific pages (transita://nationalities,transita://nationality/<slug>).Guided prompts: Use built-in prompts (
find-my-visa,compare-options,where-should-i-move) to walk through eligibility quizzes and comparisons interactively.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@transita/mcp-serverI'm an Indian software engineer, where should I move?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@transita/mcp-server
Immigration eligibility intelligence for Claude Desktop, Cursor, Cline, Continue, Zed, and any MCP-compatible AI assistant.
Transita figures out which country you should move to — and runs the whole relocation. This MCP server exposes the same matcher, country comparisons, visa checklists, and nationality guides that power transita.app, so you can ask any AI assistant "where should I move?" and get a real, sourced answer.
The server is a stateless shim. It calls the public Transita JSON API, so visa data updates the moment transita.app redeploys. No data lives in this package.
Install
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"transita": {
"command": "npx",
"args": ["-y", "@transita/mcp-server"]
}
}
}Restart Claude Desktop. The Transita tools should appear in the input box.
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"transita": {
"command": "npx",
"args": ["-y", "@transita/mcp-server"]
}
}
}Cline (VS Code extension)
Open the Cline MCP settings panel and add:
{
"transita": {
"command": "npx",
"args": ["-y", "@transita/mcp-server"]
}
}Continue, Zed, any other MCP client
Use the same pattern — command: npx, args: ["-y", "@transita/mcp-server"].
Related MCP server: mcp-travelcode
What it exposes
Tools (5)
Tool | What it does |
| Score a profile (citizenship, education, work years, income, goal, timeline) against every visa Transita supports. Returns top matches ranked by eligibility. |
| Full details for a single visa: eligibility, processing time, fees, validity, PR path, and a free preview of the document checklist. |
| Side-by-side comparison of 2-3 visa pathways with deltas (fastest processing, lowest cost, longest validity, PR path). |
| Country-level summary: number of visa pathways, EU membership, score dimensions, drawbacks, top cities with rent ranges, PR/citizenship timelines. |
| Curated top destinations and recommended visas for citizens of a given country. Best first stop for "where should I move?" |
| Live intake status for round-based programmes: whether the programme is open, the date of the last round, and its cutoff score. |
Resources (4 base + dynamic templates)
transita://visas— full active visa cataloguetransita://countries— destination countries + visa countstransita://nationalities— index of curated nationality landing pagestransita://nationality/<slug>— single nationality page (e.g.transita://nationality/indian)
Prompts (3)
find-my-visa— guided eligibility quiz thentransita_match_visascompare-options— drivestransita_compare_visaswith a chosen set of idswhere-should-i-move— open exploration starting from nationality
Try it
Once installed, ask your AI assistant questions like:
"I'm an Indian software engineer with a master's and 5 years of experience. Where should I move?"
"Compare the US O-1A, Germany's EU Blue Card, and Portugal's D8 — which is fastest, cheapest, and which has the best path to permanent residency?"
"What does Portugal's D8 digital nomad visa actually require?"
"How do destination scores compare for Germany versus the Netherlands?"
The model will pick the right Transita tool, call it, and synthesise the answer. Visa data is verified by the Transita team monthly; every match links back to the official government source.
Configuration
Env var | Default | Purpose |
|
| Override the API base URL (useful for local dev against |
|
| Custom UA string for analytics. |
Free vs paid
Everything this MCP server exposes is free. The full document checklist + 30-day action plan is part of Transita's paid action plan and lives at https://transita.app/visa/<id>. The MCP server's tools include a checklist preview (lead time, ancillary cost, first section) and link to the full plan.
Development
git clone https://github.com/snenenenenenene/transita-mcp-server.git
cd transita-mcp-server
bun install
bun run build
# Point at a local Transita dev server
TRANSITA_API_URL=http://localhost:3000 node dist/cli.jsTo smoke-test from the command line:
{
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"smoke","version":"0.0"}}}'
echo '{"jsonrpc":"2.0","method":"notifications/initialized"}'
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
} | node dist/cli.jsPublishing to npm + the MCP Registry
Two-step flow. The MCP Registry stores metadata; npm hosts the artifact.
# 1. Publish to npm (must be on a fresh version; bump in package.json first)
cd packages/mcp-server
bun run build
npm publish --access public
# 2. Publish metadata to the MCP Registry
# Install mcp-publisher once: brew install mcp-publisher
# server.json is committed alongside this README.
mcp-publisher login github
mcp-publisher publishAfter publishing, the server is listed at https://registry.modelcontextprotocol.io and discoverable inside MCP-compatible clients.
License
MIT — see LICENSE.
Links
Website: https://transita.app
MCP landing page: https://transita.app/mcp
Source (public mirror): https://github.com/snenenenenenene/transita-mcp-server
MCP protocol: https://modelcontextprotocol.io
Available Tools
5 toolstransita_compare_visasCompare visasAInspect
Compare 2-3 visa pathways side-by-side. Returns processing time, cost, validity, PR-pathway, and a delta summary highlighting the fastest, cheapest, and most permanent option.
| Name | Required | Description | Default |
|---|---|---|---|
| visa_ids | Yes | 2-3 Transita visa ids. Discover ids via transita_match_visas or the transita://visas resource. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return values comprehensively (processing time, cost, validity, PR-pathway, delta summary). With no annotations provided, the description fully covers behavioral expectations. It does not mention potential errors or data freshness, but for a comparison tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short, front-loaded sentences. The first sentence states the core purpose, and the second lists the return fields. Every word contributes meaning without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema), the description is adequately complete. It explains both the action and the expected result. It could optionally mention that it requires 2-3 items, but that is already enforced by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% as the only parameter 'visa_ids' already has a clear description. The tool description does not add additional parameter semantics beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Compare' and the resource 'visa pathways side-by-side'. It lists specific output fields (processing time, cost, validity, PR-pathway, delta summary), making the tool's purpose distinct from siblings which provide single visa details or matching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool should be used when comparing 2-3 visa pathways and mentions how to obtain visa ids via transita_match_visas or the transita://visas resource. However, it does not explicitly state when not to use it or provide alternative tools for non-comparison scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transita_country_overviewCountry overviewAInspect
Get summary data for a destination country: number of visa pathways, EU member status, score dimensions, drawbacks, top cities with rent ranges, and PR/citizenship timelines.
| Name | Required | Description | Default |
|---|---|---|---|
| country_code | Yes | Lowercase country code, e.g. 'us', 'de', 'pt'. List available codes via the transita://countries resource. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It lists returned data but does not disclose whether the operation is read-only, any rate limits, authentication requirements, or side effects. This leaves the agent uncertain about safety and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently communicates the tool's purpose and outputs. Every element earns its place with no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description lists the major return dimensions (visa pathways, EU status, score dimensions, drawbacks, cities with rents, PR/citizenship timelines). This provides sufficient context for an overview tool, though structural details (e.g., JSON format) are omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter (country_code) is well-documented in the schema, including a reference to the countries resource for available codes. The description adds no additional semantic value beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get summary data for a destination country' and enumerates specific data points (visa pathways, EU status, score dimensions, drawbacks, top cities with rent ranges, PR/citizenship timelines). This distinguishes it from sibling tools that focus on visas, matching, or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a country overview is needed, but provides no explicit guidance on when to use this tool versus alternatives (e.g., transita_visa_details for specific visa info). No when-not-to-use or prerequisite context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transita_match_visasMatch visasAInspect
Score a user's profile against every visa pathway Transita supports. Returns the top matches ranked by eligibility, with timeline, cost, and links to official sources. EU citizens automatically surface freedom-of-movement options first.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | ||
| goal | No | ||
| timeline | No | ||
| education | No | ||
| income_usd | No | ||
| work_field | No | ||
| work_years | No | ||
| citizenship | Yes | ||
| current_country | No | ||
| target_countries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It clearly states output (matches, ranking, timeline, cost, links) and the EU citizen special handling, but does not describe whether the tool is read-only, has side effects, or requires authentication. For a matching tool, partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action ('Score a user's profile'). Every sentence adds value: first describes core function and output, second adds EU citizen detail. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 params, no output schema, no annotations), the description covers the main purpose and output format. However, it could be more complete by explaining required parameters, error cases, or how optional params influence matching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 10 parameters with 0% description coverage. The description only generically mentions 'user's profile' without explaining how each parameter (e.g., goal, timeline, education) is used or what enum values mean. It fails to add meaning beyond property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: scoring a user's profile against all visa pathways, returning top matches with ranking, timeline, cost, and links. This differentiates it from siblings like transita_visa_details (specific visa details) and transita_compare_visas (comparing specific visas).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for initial visa matching based on a user profile, and mentions EU citizen handling, but lacks explicit guidance on when to use vs alternatives (e.g., 'Use this for a broad match; use transita_visa_details for a specific visa'). No when-not-to-use or prerequisite info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transita_search_by_nationalitySearch visas by nationalityAInspect
Show top destinations and recommended visa pathways for citizens of a given country. Ideal first stop for the question 'Where should I move?'. Returns 4-6 destinations with the best-fit visa for each, key stats, and FAQ. Falls back gracefully if a slug isn't yet curated.
| Name | Required | Description | Default |
|---|---|---|---|
| nationality | Yes | Nationality adjective (e.g. 'Indian') or country (e.g. 'India'). Case-insensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes that it returns 4-6 destinations with best-fit visa, key stats, and FAQ, and falls back gracefully if a slug isn't curated. This provides useful behavioral context beyond the schema, especially since no annotations are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is three sentences, each adding value: purpose, ideal use case, and output specifics. No superfluous words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the output format (4-6 destinations, best-fit visa, stats, FAQ) and error handling (graceful fallback). It could mention it is a read-only operation, but that is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage of the single parameter is 100%, so the description does not need to add much. The description does not provide additional meaning beyond the schema's explanation of 'nationality adjective or country, case-insensitive'. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool shows top destinations and recommended visa pathways for a given nationality. Distinguishes itself from sibling tools like 'transita_compare_visas' and 'transita_visa_details' by being an ideal first stop for the question 'Where should I move?'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Ideal first stop for the question 'Where should I move?', which tells agents when to use it. Does not explicitly mention when not to use or name alternatives, but the use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transita_visa_detailsVisa detailsAInspect
Fetch full details for a single visa pathway: eligibility category, processing time, fees, validity, PR timeline, and a free preview of the document checklist (lead time, ancillary cost, first section). The full multi-section checklist is part of Transita's $9 paid action plan.
| Name | Required | Description | Default |
|---|---|---|---|
| visa_id | Yes | Transita visa id, e.g. 'us-o1a', 'es-digital-nomad'. Use transita_match_visas or the transita://visas resource to discover ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It details what the tool returns and mentions that the full checklist is part of a paid action plan, adding transparency. However, it omits potential side effects (likely none) or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and each sentence adds essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (single parameter, no output schema), the description fully explains what the tool returns, including limitations about the checklist. The presence of sibling tools provides sufficient context for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the visa_id parameter with examples. The description reiterates its purpose and usage, adding value by showing how to obtain the id from related tools. Schema coverage is 100%, so the description complements it well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('fetch full details') and clearly identifies the resource ('single visa pathway') and the specific data included (eligibility, processing time, fees, etc.). It distinguishes from siblings like transita_compare_visas by focusing on a single visa.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (for detailed information on a single visa pathway) and provides guidance on obtaining the visa_id via transita_match_visas or a resource. It does not explicitly state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.1- First observed
transita_compare_visas - First observed
transita_country_overview - First observed
transita_match_visas - First observed
transita_search_by_nationality - First observed
transita_visa_details
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: comparing visas, country overview, profile matching, nationality-based search, and visa details. No overlap or ambiguity.
All tools use the 'transita_' prefix, but internal naming mixes verb_noun (e.g., compare_visas, match_visas) and noun_noun (e.g., country_overview, visa_details). Mostly consistent with minor deviations.
Five tools is well-scoped for a visa information server, each earning its place without being too few or too many.
The tool set covers key user workflows: overview, search, comparison, details, and profile matching. No obvious gaps for its information-providing purpose.
Maintenance
Related MCP Connectors
Travel-compliance intelligence and curated booking for digital nomads and long-stay travellers.
Your personal AI travel concierge — flights, hotels, 116M+ POIs, visas, weather & more
Plan trips and track visa days per traveller across 39,601 entry rules
Cross-border payment & banking intelligence for AI agents: SWIFT/BIC, IBAN, sanctions, FX, tracking.
Related MCP Servers
- FlicenseCqualityBmaintenanceProvides tools to fetch up-to-date visa and immigration information for various countries, helping users plan their international travel with accurate data.2-

mcp-travelcodeofficial
AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search flights and hotels, manage bookings, check flight status, and access delay statistics through the TravelCode corporate travel API, all via natural language conversations.8 npm2MIT- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search and explore Australian occupation codes (ANZSCO), visa pathways, state nominations, and SkillSelect invitation round data.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access official European business data across 15 EU countries, including company lookups, VAT validation, sanctions screening, and KYB reports.5,766 npm1MIT