Expatslist MCP
An official Model Context Protocol server provided by Expatslist that allows AI agents to access city guides, local business listings, classifieds, community Q&A, and interactive tools for expats and newcomers worldwide.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://expatslist.org/api/mcpWhat you can do with it
- Search for local businesses and recommendations in specific cities
- Access community Q&A and starter packs for new arrivals
- Retrieve city-specific information and visa guides
- Browse classifieds for housing and jobs
Source and maintenance
Protocol and capabilities
- Server
- expatslist 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 8 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
8 advertised
list_cities — List covered cities
Lists the cities ExpatsList covers, with the slug every other tool expects. Use it to resolve a city name the user typed, or when the user asks which cities are available. Returns nothing else; it does not search content.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"cities"
],
"properties": {
"cities": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"country",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"country": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "List covered cities",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}city_pulse — What is happening in a city
Recent community activity in one city: new questions, missed-connection posts, recommendations, classifieds, blog posts and businesses, grouped by type with up to five summaries each and a link to the full section. Use it for "what are people talking about in X" or "what is new in X". Limitation: only the last 1 to 90 days, and only cities from list_cities.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"city"
],
"properties": {
"city": {
"type": "string",
"description": "City slug from list_cities, or a city name"
},
"days": {
"type": "integer",
"default": 14,
"maximum": 90,
"minimum": 1,
"description": "Look back this many days"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"city",
"days",
"sections"
],
"properties": {
"city": {
"type": "object",
"required": [
"slug",
"name",
"country",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"country": {
"type": "string"
}
},
"additionalProperties": false
},
"days": {
"type": "number"
},
"sections": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"items",
"more_url"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"title",
"summary",
"city",
"url"
],
"properties": {
"url": {
"type": "string"
},
"city": {
"type": "string"
},
"type": {
"enum": [
"question",
"human_connection",
"recommendation",
"classified",
"blog",
"business"
],
"type": "string"
},
"price": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"posted": {
"type": [
"string",
"null"
]
},
"answers": {
"type": "number"
},
"summary": {
"type": "string"
},
"category": {
"type": [
"string",
"null"
]
},
"resolved": {
"type": "boolean"
},
"verified": {
"type": "boolean"
},
"neighborhood": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"more_url": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "What is happening in a city",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_expatslist — Search ExpatsList
Keyword search across business listings, classifieds, blog posts, questions, recommendations and missed-connection posts, optionally limited to one city and one content type. Use it when the user names a thing to find (a dentist, a coworking space, a topic). Returns short summaries with links; full details are on the linked page. Limitation: keyword match, not semantic; at most 10 results.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"city": {
"type": "string",
"description": "City slug or name; omit to search all cities"
},
"type": {
"enum": [
"all",
"businesses",
"classifieds",
"blogs",
"questions",
"recommendations",
"connections"
],
"type": "string",
"default": "all"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 10,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "What to search for"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query",
"city",
"results"
],
"properties": {
"city": {
"type": [
"string",
"null"
]
},
"query": {
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"title",
"summary",
"city",
"url"
],
"properties": {
"url": {
"type": "string"
},
"city": {
"type": "string"
},
"type": {
"enum": [
"question",
"human_connection",
"recommendation",
"classified",
"blog",
"business"
],
"type": "string"
},
"price": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"posted": {
"type": [
"string",
"null"
]
},
"answers": {
"type": "number"
},
"summary": {
"type": "string"
},
"category": {
"type": [
"string",
"null"
]
},
"resolved": {
"type": "boolean"
},
"verified": {
"type": "boolean"
},
"neighborhood": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "Search ExpatsList",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}browse — Browse newest content of one type
Newest items of one content type in one city: questions, missed-connection posts (human_connection), recommendations, classifieds, blog posts or businesses. Optional category filter. For businesses with no category it returns the category list with counts instead of items. Use it for "latest questions in X", "any missed connections in X", "show me restaurants in X". Limitation: at most 10 items per call.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"city"
],
"properties": {
"city": {
"type": "string",
"description": "City slug from list_cities, or a city name"
},
"type": {
"enum": [
"question",
"human_connection",
"recommendation",
"classified",
"blog",
"business"
],
"type": "string"
},
"limit": {
"type": "integer",
"default": 6,
"maximum": 10,
"minimum": 1
},
"category": {
"type": "string",
"description": "Category slug or name, e.g. housing, restaurants, visas"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"city",
"items",
"more_url"
],
"properties": {
"city": {
"type": "string"
},
"type": {
"enum": [
"question",
"human_connection",
"recommendation",
"classified",
"blog",
"business"
],
"type": "string"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"title",
"summary",
"city",
"url"
],
"properties": {
"url": {
"type": "string"
},
"city": {
"type": "string"
},
"type": {
"enum": [
"question",
"human_connection",
"recommendation",
"classified",
"blog",
"business"
],
"type": "string"
},
"price": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"posted": {
"type": [
"string",
"null"
]
},
"answers": {
"type": "number"
},
"summary": {
"type": "string"
},
"category": {
"type": [
"string",
"null"
]
},
"resolved": {
"type": "boolean"
},
"verified": {
"type": "boolean"
},
"neighborhood": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"more_url": {
"type": "string"
},
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"slug",
"businesses"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"businesses": {
"type": "number"
},
"subcategories": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "Browse newest content of one type",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_item — Get one item
One item by type, city and slug: a question with its best answer and the count of further answers, a missed-connection post, a recommendation, a classified, a blog post or a business listing. Use it after a search or browse result when the user wants more on one item. Limitation: text is a summary of up to about 600 characters; contact details are never included and are on the linked page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"city",
"slug"
],
"properties": {
"city": {
"type": "string",
"description": "City slug from the result, or \"global\" for blog posts without a city"
},
"slug": {
"type": "string",
"description": "The slug at the end of the item url"
},
"type": {
"enum": [
"question",
"human_connection",
"recommendation",
"classified",
"blog",
"business"
],
"type": "string"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"title",
"summary",
"city",
"url"
],
"properties": {
"url": {
"type": "string"
},
"city": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"type": {
"enum": [
"question",
"human_connection",
"recommendation",
"classified",
"blog",
"business"
],
"type": "string"
},
"price": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"posted": {
"type": [
"string",
"null"
]
},
"answers": {
"type": "number"
},
"summary": {
"type": "string"
},
"category": {
"type": [
"string",
"null"
]
},
"resolved": {
"type": "boolean"
},
"verified": {
"type": "boolean"
},
"top_answer": {
"type": [
"string",
"null"
]
},
"neighborhood": {
"type": [
"string",
"null"
]
},
"more_answers_on_site": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Get one item",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}country_info — Country reference data
Reference numbers for one country from ExpatsList tools: digital nomad visa (requirements, income threshold, fee, duration), cost of living (rent, meals, utilities, coworking for up to five cities), healthcare (system, costs, English availability), tax (system, residency days, social security), safety (scores, risks, emergency number) or tipping (rates by service). Use it for factual questions about a country. Limitation: one country and one topic per call; figures are indicative and the linked page has the full table and sources.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"country",
"topic"
],
"properties": {
"topic": {
"enum": [
"nomad_visa",
"cost_of_living",
"healthcare",
"tax",
"safety",
"tipping"
],
"type": "string"
},
"country": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"description": "Country name in English, e.g. Portugal"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"topic",
"country",
"data",
"url"
],
"properties": {
"url": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"topic": {
"enum": [
"nomad_visa",
"cost_of_living",
"healthcare",
"tax",
"safety",
"tipping"
],
"type": "string"
},
"country": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Country reference data",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search — Search (connector)
Connector-style search across all ExpatsList content. Returns ids for fetch. Prefer search_expatslist when you can filter by city or type.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 120,
"minLength": 2
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"results"
],
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"title": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "Search (connector)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}fetch — Fetch (connector)
Connector-style fetch of one item by the id returned from search. Same summary as get_item.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"title",
"text",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"text": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
}{
"title": "Fetch (connector)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1292 ms
- 95th percentile latency
- 1292 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1292 ms · metadata changed · 8 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http expatslist-mcp https://expatslist.org/api/mcpCodex
codex mcp add expatslist-mcp --url https://expatslist.org/api/mcpCursor
{
"mcpServers": {
"expatslist-mcp": {
"url": "https://expatslist.org/api/mcp"
}
}
}Cline
{
"mcpServers": {
"expatslist-mcp": {
"type": "streamableHttp",
"url": "https://expatslist.org/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"expatslist-mcp": {
"type": "http",
"url": "https://expatslist.org/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http expatslist-mcp https://expatslist.org/api/mcpClaude Desktop
{
"mcpServers": {
"expatslist-mcp": {
"url": "https://expatslist.org/api/mcp"
}
}
}Windsurf
{
"mcpServers": {
"expatslist-mcp": {
"serverUrl": "https://expatslist.org/api/mcp"
}
}
}Let your agent find its tools
Find servers like Expatslist MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Expatslist MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.