Skip to main content
Glama
snenenenenenene

@transita/mcp-server

@transita/mcp-server

Visa eligibility and immigration data from Transita for Claude, ChatGPT, Cursor, Cline, Zed and any other MCP client.

Ask your assistant "where should I move?" and it can check your profile against 100+ visas in 16 countries, compare pathways, and tell you whether a programme is open right now. Every answer links to the official government source.

The package holds no data. It calls the public Transita API, so it picks up visa changes as soon as transita.app redeploys. No API key, no account.

There are two ways to connect:

  • Hosted: https://transita.app/api/mcp (Streamable HTTP, no auth). Nothing to install.

  • Local: npx -y @transita/mcp-server (stdio). Needs Node 20 or newer.

Install

Claude Code

Hosted:

claude mcp add --transport http transita https://transita.app/api/mcp

Local:

claude mcp add transita -- npx -y @transita/mcp-server

Add --scope user to make it available in every project. Run /mcp to check it connected.

Claude Desktop and claude.ai

Hosted: add a custom connector at claude.ai/customize/connectors with the URL https://transita.app/api/mcp. It shows up in Claude Desktop too.

Local: edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows, then restart Claude Desktop.

{
  "mcpServers": {
    "transita": {
      "command": "npx",
      "args": ["-y", "@transita/mcp-server"]
    }
  }
}

ChatGPT

ChatGPT only talks to remote servers, so use the hosted endpoint. Turn on developer mode in ChatGPT's settings, create a new connector, paste https://transita.app/api/mcp as the server URL and pick "No authentication". Developer mode is limited to some paid plans and OpenAI moves the menu around, so check their help pages if you can't find it.

Cursor

Add this to ~/.cursor/mcp.json for all projects, or .cursor/mcp.json for one:

{
  "mcpServers": {
    "transita": {
      "url": "https://transita.app/api/mcp"
    }
  }
}

For the local version, replace the url line with "command": "npx", "args": ["-y", "@transita/mcp-server"].

Cline, Continue, Zed and others

Any client that takes a stdio command works with command: npx and args: ["-y", "@transita/mcp-server"]. Clients that support Streamable HTTP can use https://transita.app/api/mcp instead.

Related MCP server: anzsco-mcp

Tools

Tool

What it does

transita_match_visas

Scores a profile (citizenship, education, years of work, income, goal, timeline) against every visa and returns the closest matches, with scores that are estimates.

transita_visa_details

One visa in full: eligibility, processing time, fees, validity, route to permanent residency, and a preview of the document checklist.

transita_compare_visas

Puts 2 or 3 visas side by side and points out which is fastest, cheapest, valid longest, and which leads to permanent residency.

transita_country_overview

A destination at a glance: number of visas, EU membership, scores, drawbacks, main cities with rent ranges, PR and citizenship timelines.

transita_search_by_nationality

Destinations and a suggested visa for citizens of one country. Useful when someone asks "where could I move?" and only knows their citizenship.

transita_programme_status

Whether a visa is taking applications now. For round-based programmes like Express Entry it also gives the last round's date and cutoff score.

All tools are read-only: they declare readOnlyHint: true, destructiveHint: false, idempotentHint: true and openWorldHint: false. Nothing is stored or sent on your behalf, and no account or API key is needed.

Resources

  • transita://visas: every active visa

  • transita://countries: destination countries with visa counts

  • transita://nationalities: the nationality guides

  • transita://nationality/<slug>: one nationality guide, e.g. transita://nationality/indian

Prompts

  • find-my-visa: asks a few eligibility questions, then calls transita_match_visas

  • compare-options: runs transita_compare_visas on the visas you pick

  • where-should-i-move: starts from your nationality and explores from there

Example questions

  • "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 one gets me permanent residency soonest?"

  • "Is Canada's Express Entry open right now, and what was the last cutoff?"

  • "What does Portugal's D8 digital nomad visa require?"

Configuration

Only relevant for the local package.

Env var

Default

Purpose

TRANSITA_API_URL

https://transita.app

API base URL. Point it at http://localhost:3000 for local development.

TRANSITA_MCP_USER_AGENT

transita-mcp-server/<version>

User-Agent sent with each API request.

Free and paid

Everything the server returns is free. The full document checklist and 30-day action plan are part of Transita's paid plan at https://transita.app/path/<id>. Tool results include a checklist preview and a 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

Run it against a local Transita dev server:

TRANSITA_API_URL=http://localhost:3000 node dist/cli.js

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.js

Publishing

npm hosts the package and the MCP Registry holds the metadata in server.json. Bump the version in package.json, both version fields of server.json, src/server.ts and src/api.ts first.

Build and publish to npm:

bun run build
npm publish --access public

Push the source to the public mirror:

./sync-mirror.sh

Publish the metadata. Install the publisher once with Homebrew first.

mcp-publisher login github
mcp-publisher publish

License

MIT, see LICENSE.

Available Tools

5 tools
transita_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.

NameRequiredDescriptionDefault
visa_idsYes2-3 Transita visa ids. Discover ids via transita_match_visas or the transita://visas resource.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
country_codeYesLowercase country code, e.g. 'us', 'de', 'pt'. List available codes via the transita://countries resource.

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
ageNo
goalNo
timelineNo
educationNo
income_usdNo
work_fieldNo
work_yearsNo
citizenshipYes
current_countryNo
target_countriesNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
nationalityYesNationality adjective (e.g. 'Indian') or country (e.g. 'India'). Case-insensitive.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
visa_idYesTransita visa id, e.g. 'us-o1a', 'es-digital-nomad'. Use transita_match_visas or the transita://visas resource to discover ids.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv0.1.1
    • First observedtransita_compare_visas
    • First observedtransita_country_overview
    • First observedtransita_match_visas
    • First observedtransita_search_by_nationality
    • First observedtransita_visa_details

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: comparing visas, country overview, profile matching, nationality-based search, and visa details. No overlap or ambiguity.

Naming Consistency4/5

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.

Tool Count5/5

Five tools is well-scoped for a visa information server, each earning its place without being too few or too many.

Completeness5/5

The tool set covers key user workflows: overview, search, comparison, details, and profile matching. No obvious gaps for its information-providing purpose.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search and explore Australian occupation codes (ANZSCO), visa pathways, state nominations, and SkillSelect invitation round data.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to access official European business data across 15 EU countries, including company lookups, VAT validation, sanctions screening, and KYB reports.
    8,431 npm
    1
    MIT