# Expatslist

> City guides, local business listings and Q&A for expats and newcomers in cities worldwide.

- name: org.expatslist/mcp
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 96/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/org.expatslist%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/org.expatslist%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "expatslist": {
      "type": "http",
      "url": "https://expatslist.org/api/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-97% +updated-18d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 96/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,496 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 1,496 tokens to load them all
- tool set hash: 78313d6d54e34da21ac7be97709e4f53
- badge: [![protogrid quality](https://protogrid.dev/badge/org.expatslist/mcp.svg)](https://protogrid.dev/servers/org.expatslist/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://expatslist.org/api/mcp (streamable-http, auth none, reachable true, uptime30d 0.9705882)

## Packages

_none_

## Tools (8)

- `browse`: 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.
- `city_pulse`: 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.
- `country_info`: 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.
- `fetch`: Connector-style fetch of one item by the id returned from search. Same summary as get_item.
- `get_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.
- `list_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.
- `search`: Connector-style search across all ExpatsList content. Returns ids for fetch. Prefer search_expatslist when you can filter by city or type.
- `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.
