PensionHunter
REMOTE · MCP.PENSIONHUNTER.AI
Cross-border pension facts: country coverage, sourced rules, dated deadlines and employer lookups.
Available components
Last scanned (22 hours ago)
Scores higher than 63% of remote servers
Reachable. Last reached 16 Oct 2026.
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability59
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4065 tokens (~369/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management10
- Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 16 Oct 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “check_work_history” rewrote its description, which is the text the model reads security
- Tool “country_pension_facts” rewrote its description, which is the text the model reads security
- Tool “resolve_employer” rewrote its description, which is the text the model reads security
- Schema quality: 2235 → 4065 ▼ functional
- Schema quality: good → excellent functional
- Server version: 1.8.0 → 1.10.0 functional
- New tool “deadline_check” functional
- New tool “gpfr_fund_count” functional
- New tool “gpfr_info” functional
- New tool “gpfr_register” functional
- New tool “gpfr_status” functional
- “check_work_history” added an optional parameter “question” cosmetic
- “country_pension_facts” added an optional parameter “pensionType” cosmetic
- “country_pension_facts” added an optional parameter “question” cosmetic
- 15 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “list_covered_countries” rewrote its description, which is the text the model reads security
- “authority_answer” reworded the description of “language” cosmetic
- “check_work_history” reworded the description of “language” cosmetic
- “country_pension_facts” reworded the description of “language” cosmetic
- “create_order_link” reworded the description of “language” cosmetic
- “list_covered_countries” reworded the description of “language” cosmetic
- “resolve_employer” reworded the description of “language” cosmetic
- 14 Oct 26 −2
- The server rewrote its instructions, which are the text every model session reads security
- Tool “authority_answer” rewrote its description, which is the text the model reads security
- Tool “create_order_link” rewrote its description, which is the text the model reads security
- Tool “check_work_history” rewrote its description, which is the text the model reads security
- Tool “country_pension_facts” rewrote its description, which is the text the model reads security
- Tool “list_covered_countries” rewrote its description, which is the text the model reads security
- Tool “resolve_employer” rewrote its description, which is the text the model reads security
- Schema quality: pass → fail ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Server version: 1.6.0 → 1.8.0 functional
- Server version: 1.1.1 → 1.6.0 functional
- New tool “authority_answer” functional
- New tool “create_order_link” functional
- “check_work_history” added an optional parameter “language” cosmetic
- “country_pension_facts” added an optional parameter “language” cosmetic
- “list_covered_countries” added an optional parameter “language” cosmetic
- “resolve_employer” added an optional parameter “language” cosmetic
- “create_order_link” reworded the description of “tier” cosmetic
- 13 Oct 26 73
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 16 Oct 2026 · Probed https://mcp.pensionhunter.ai
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.pensionhunter.ai | CN=YE1,O=Let's Encrypt,C=US | 13 Oct 2026 | 11 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 6cae028dd9e28ea84cd053a95845481eed1 |
| SANs: mcp.pensionhunter.ai | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.pensionhunter.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | present | 3799 | 8 | Verified |
| pensionhunter.ai. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains; preload |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.pensionhunter.ai | Verified | 200 | |
| http (plaintext) | http://mcp.pensionhunter.ai | HTTPS enforced | 301 | https://mcp.pensionhunter.ai/ |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
authority_answer Authority answers on the record ~426
What a national pension institution told us in writing, as published on our answers page: the institution, its answer exactly as published, any translation marked as ours, the date of the reply and the link to that answer on pensionhunter.ai/answers. The question is free text, matched to the questions we hold answers to for that country; when nothing matches, the result lists those questions. When we wrote to the country and hold no answer yet, the status says so with the date we asked, from our record of letters sent. Institutions only, never a person. A passage that gives a contact detail stays on the answers page and is returned with its link and the reason. Accepts names, native names, aliases and ISO codes.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | yes | One country, as an English name, a native name, a common alias or an ISO 3166 alpha-2 or alpha-3 code, in any case. Examples: Netherlands, Nederland, Holland, NL, NLD; United Kingdom, UK, GB, Britain… |
| language | string | – | Optional. The language for our own sentences (notes, offer, labels, gap and register sentences), as an ISO 639-1 code: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, s… |
| question | string | yes | The question in plain words, for example "Can I deal with this without travelling there?", "What do heirs need?" or "Do they publish figures on unpaid pensions?". Matched by keywords to the questions… |
| Name | Type | Req | Description |
|---|---|---|---|
| answers | array | yes | – |
| answersPage | string | yes | Our answers page, https://pensionhunter.ai/answers. |
| askedInstitution | string|null | yes | The institution that letter went to. Never a person. Null when none. |
| askedOn | string|null | yes | ISO date of our most recent dated letter to the country, or null. |
| country | string | yes | – |
| iso2 | string|null | yes | – |
| language | object | – | Present when language was sent: the language served, its own name, and labels for source, read date, translation and original in that language. Our sentences in this result are translations of our ow… |
| localName | string | – | The country name in the language served, from Unicode CLDR. Present only for a language other than English. |
| matched | boolean | yes | True when the question matched at least one published answer. |
| next_step | object | – | What we add to the free official route, as one structured field built from the finding: one line to pass on, the pre-filled order link with a source tag, the tier, the country and the fee from our pr… |
| note | string | – | – |
| query | string | yes | The country string as sent. |
| question | string | yes | The question as sent. |
| questionKey | string|null | – | The question topic matched. |
| questions | array | yes | When nothing matched: the questions we hold answers to for this country. |
| recognised | boolean | yes | False when the string is not a country we can read. |
| status | string|null | yes | Where our written questions to the country stand: answered when our answers page publishes an answer from an institution there; asked_no_answer_yet when asked on askedOn, no answer yet; asked_no_answ… |
No examples provided.
check_work_history Check a work history ~393
For each country in a work history: whether a pension is likely to exist and why, with a verdict that says what it depends on (Singapore CPF depends on citizen, permanent resident or pass holder status), why self service fails from abroad, a dated obligation only where it applies, the dates that would change the answer, where dormant money moves to an unclaimed money body, the workplace pension plan for an employer we researched, and the free official route with contact details. Years may be exact, rough ("around 2005", "late 1990s", "the 1990s") or unknown; we never refuse for missing years. A mapped country carries its institution and official route instead, and a call with only mapped countries carries no next step. Countries accept names, native names, aliases and ISO codes. Nothing sent is stored.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | One entry per period of work in a country. |
| language | string | – | Optional. The language for our own sentences (notes, offer, labels, gap and register sentences), as an ISO 639-1 code: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, s… |
| question | string | – | Optional. The person's question in plain words; used only to tell which kind of pension it is about. |
| subject | object | – | Optional facts about the person, used only to decide which dated obligations apply. |
| Name | Type | Req | Description |
|---|---|---|---|
| countries | array | yes | – |
| language | object | – | Present when language was sent: the language served, its own name, and labels for source, read date, translation and original in that language. Our sentences in this result are translations of our ow… |
| next_step | object | – | What we add to the free official route, as one structured field built from the finding: one line to pass on, the pre-filled order link with a source tag, the tier, the country and the fee from our pr… |
No examples provided.
country_pension_facts Country pension facts ~448
One country's stored facts: what the money is worth, why the free route fails from abroad, and dated obligations, each with source and read date, then the free official route: the official bodies with website, email and phone read from their own contact pages. Pass the person's question, or pensionType, and the answer is about that kind of pension (state, workplace, provident or personal): facts about another kind are left out and named. Accepts names, native names, aliases and ISO codes. A mapped country returns tier: mapped with its institution, official route and agreements, and no next step. Any other country outside our coverage returns covered: false with a note.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | yes | One country, as an English name, a native name, a common alias or an ISO 3166 alpha-2 or alpha-3 code, in any case. Examples: Netherlands, Nederland, Holland, NL, NLD; United Kingdom, UK, GB, Britain… |
| language | string | – | Optional. The language for our own sentences (notes, offer, labels, gap and register sentences), as an ISO 639-1 code: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, s… |
| pensionType | string | – | Optional. The kind of pension asked about, when known: state, workplace, provident or personal. Overrides the question. |
| question | string | – | Optional. The person's question in plain words, for example "Where is my workplace pension from Merrill Lynch?" or "Do I still have money in my EPF account?". Used only to tell which kind of pension… |
| Name | Type | Req | Description |
|---|---|---|---|
| answersFor | object | – | The kind of pension this answer is about: state, workplace, provident (a provident fund account such as EPF or CPF) or personal, read from pensionType, the question, or a named employer. |
| contactAbroad | object|null | – | A contact route for people abroad that the institution has told us in writing we may publish, with that written reply as its source. Null otherwise. |
| country | string | yes | The country it was read as. |
| covered | boolean | yes | – |
| datedObligations | array | – | – |
| freeOfficialRoute | array | – | The free official route first: the official bodies for this country and this kind of pension, with website, email, phone and the date we read their contact page. Our report is only what we add on top. |
| iso2 | string|null | yes | – |
| language | object | – | Present when language was sent: the language served, its own name, and labels for source, read date, translation and original in that language. Our sentences in this result are translations of our ow… |
| localName | string | – | The country name in the language served, from Unicode CLDR. Present only for a language other than English. |
| mapped | object | – | For a mapped country only: the institution that pays the contributory old age pension, its website as a bare domain, its official route to contact it from abroad, and which researched countries it ha… |
| next_step | object | – | What we add to the free official route, as one structured field built from the finding: one line to pass on, the pre-filled order link with a source tag, the tier, the country and the fee from our pr… |
| note | string | – | – |
| pending | string | – | – |
| query | string | yes | The country string as sent. |
| recognised | boolean | yes | False when the string is not a country we can read. |
| schemeRegister | object|null | – | For a workplace pension question: where the country lists occupational pension funds. |
| tier | string | – | Present for a mapped country: one we have mapped but not yet researched in depth. |
| whatTheMoneyIsWorth | object|null | – | A stored fact with the source it came from and the date we read that source. Null when we hold no sourced line. |
| whyTheFreeRouteFailsFromAbroad | object|null | – | A stored fact with the source it came from and the date we read that source. Null when we hold no sourced line. |
No examples provided.
create_order_link Open a checkout for a report ~551
Opens a secure Stripe checkout for one of our reports, for the countries the person chose, and returns its link, which works for about 24 hours. Call it only when the person asks to order. Send only the countries and the tier, never a name, email address or any other personal detail; Stripe asks for the email at checkout. Prices: Country Pension Identification Report $99 per country, one report covering every country you tick; Enhanced Pension Identification Report $199 for one country; Global Pension Identification Report $299 for two or more, in one report. The Country report: Identification only: we name who holds each pension in every country you tick, with the sourced contact route. The Enhanced report: For one country: every fund identified, a complete, ready-to-send information request for each one, and our team of experts with you until the end, through every reply. The Global report: For every country you worked in, in one report: every fund identified, a complete, ready-to-send information request for each one, and our team of experts with you until the end, through every reply. You send each request to the pension body yourself; we never contact a fund for you. Only countries we cover can be ordered. If a checkout cannot be opened, the result is our order page with the same choices filled in.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | array | yes | The countries to order for, each a name, native name, alias or ISO code, for example ["NL", "United Kingdom"]. Only countries we cover; call list_covered_countries when unsure. |
| language | string | – | Optional. The language for our own sentences (notes, offer, labels, gap and register sentences), as an ISO 639-1 code: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, s… |
| tier | string | yes | The report to order. "country": the Country Pension Identification Report, $99 per country, one report covering every country you tick, one or more countries. "enhanced": the Enhanced Pension Identif… |
| Name | Type | Req | Description |
|---|---|---|---|
| checkoutUrl | string|null | yes | The Stripe checkout link, or null when none could be opened. |
| countries | array | yes | ISO 3166 alpha-2 codes of the countries ordered. |
| expiresAt | string|null | yes | When the checkout link stops working, ISO 8601 UTC, or null. |
| fee | string | yes | The fee, from our published prices. |
| language | object | – | Present when language was sent: the language served, its own name, and labels for source, read date, translation and original in that language. Our sentences in this result are translations of our ow… |
| note | string | yes | One line to pass on to the person. |
| offer | string | yes | The report offer, with the fee and refund terms. |
| orderUrl | string | yes | Our order page with the same tier and countries filled in. It never carries personal data. |
| product | string | yes | The report name. |
| status | string | yes | checkout_opened when checkoutUrl is a live Stripe checkout; order_page when a checkout could not be opened and orderUrl is the way to order. |
| tier | string | yes | – |
No examples provided.
deadline_check When does a departure deadline run out ~383
For a country the person left, and the date they left or, where the clock runs from a death, the date of death: the date our deadline register's rule gives, by adding the period stated in the register row to that date. The free official route comes first, with the official source page, the verbatim quote and the date we read it. Rows whose start event is not stated, or is not the date given, are returned as rules without a date. Send only the country and the date; nothing is stored. Identification only: we do not advise, and the official body decides.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | yes | The country left: ISO 3166 alpha-2 code or English name, for example "JP" or "Japan". Call with any value to get the list of countries we hold. |
| date | string | yes | The date, YYYY-MM-DD, not after today. |
| event | string | – | "left": the date the person left that country. "died": the date of death, for clocks that run from a death. Optional when the country has only one. |
| language | string | – | Optional. The language for our own sentences (notes, offer, labels, gap and register sentences), as an ISO 639-1 code: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, s… |
| Name | Type | Req | Description |
|---|---|---|---|
| arithmetic | string | yes | How the date is worked out. |
| clocks | array | yes | Dates computed from register rows that state both the start event and the period. |
| country | string | yes | – |
| date | string | yes | The date sent, YYYY-MM-DD. |
| event | string | yes | – |
| iso2 | string | yes | – |
| language | object | – | Present when language was sent: the language served, its own name, and labels for source, read date, translation and original in that language. Our sentences in this result are translations of our ow… |
| next_step | object | yes | What we add to the free official route, as one structured field built from the finding: one line to pass on, the pre-filled order link with a source tag, the tier, the country and the fee from our pr… |
| note | string | yes | Identification only; the official body decides. |
| rulesWithoutDate | array | yes | Rules we hold for this country and event whose start is not stated or is not the date given: shown with their source, no date. |
| today | string | yes | The day the result was computed, UTC, YYYY-MM-DD. |
No examples provided.
gpfr_fund_count GPFR: people registered for a fund ~168
For fund-side agents: how many confirmed, plausible people are registered for a pension fund, shown from 10 upwards, otherwise "fewer than 10". An aggregate only: no registrant is ever listed or identifiable.
| Name | Type | Req | Description |
|---|---|---|---|
| fund | string | yes | A GPFR fund key (from gpfr_info) or the fund's name. |
| language | string | – | Optional. ISO 639-1 code for our sentences and the consent text: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, sv, th, tl, tr, zh. Default en. Any other language is a… |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer|null | yes | – |
| fund | string | yes | – |
| key | string|null | yes | – |
| language | string | – | – |
| languageNote | string | – | Present only when the language asked for is not a GPFR language: why the answer and the consent text are in English. |
| note | string | yes | – |
| shown | string | yes | – |
| threshold | integer | yes | – |
No examples provided.
gpfr_info GPFR: what it is and the consent text ~227
What GPFR, the Global Pension Finding Register is, in the caller's language: a free register where people who worked abroad add themselves once and pension funds look for the members they cannot reach. Free for people; funds and trustees pay per confirmed match. Nothing is shared unless the person and the fund both say yes. Returns the register page in that language, the consent text and its version (show it to the person before gpfr_register), and, with a country, the pension fund pages we publish for it. Read only.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | Optional. A country name or ISO code; returns our fund pages for it. |
| language | string | – | Optional. ISO 639-1 code for our sentences and the consent text: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, sv, th, tl, tr, zh. Default en. Any other language is a… |
| Name | Type | Req | Description |
|---|---|---|---|
| agentRule | string | yes | – |
| ambition | string | yes | An ambition, stated as one. |
| consent | object | yes | – |
| consentFlow | string | yes | – |
| country | string|null | yes | – |
| emailPromise | string | yes | – |
| free | string | yes | – |
| fundPages | array | yes | – |
| language | string | yes | – |
| languageNote | string | – | Present only when the language asked for is not a GPFR language: why the answer and the consent text are in English. |
| live | string | yes | What is live, exactly as it stands. |
| matching | string | yes | – |
| name | string | yes | – |
| registerUrl | string | yes | – |
| trust | string | yes | – |
| what | string | yes | – |
No examples provided.
gpfr_register GPFR: register a person who said yes ~502
Registers a person in GPFR. First show the person the consent sentence from gpfr_info (consent.text), word for word, in their language, and ask whether they agree. Call this only after they say yes, with consent.consent_text_version equal to the consent.version you showed and person_said_yes: true. Send their email, full name, date of birth, work periods (country, years, optional employer and fund), optional earlier names and national number, and the consent object {consent_text_version, person_said_yes: true, timestamp, client: {name, version}}. Without the consent object, without the yes, or with a version we did not issue, the call is refused and nothing is stored. Name, earlier names, date of birth, national number and employer names reach our server as text; we turn them into codes on receipt and keep only the codes, never the text; nothing is logged or returned. The registration stays pending until the person clicks the link in the one confirmation email we send. You never give the second yes: sharing with a fund is agreed only through the link in our match email. The result is a status and a reference, never a personal detail.
| Name | Type | Req | Description |
|---|---|---|---|
| consent | object | yes | Required. The yes the person gave after you showed them the gpfr_info consent sentence in their language. |
| date_of_birth | string | yes | YYYY-MM-DD. Hashed on receipt. |
| earlier_names | array | – | Optional earlier full names (maiden or former). Hashed on receipt. |
| string | yes | The person's email address. We send one email to confirm it; nothing happens until they click it. | |
| language | string | – | Optional. ISO 639-1 code for our sentences and the consent text: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, sv, th, tl, tr, zh. Default en. Any other language is a… |
| name | string | yes | The person's full name, as an employer or fund would hold it. Hashed on receipt. |
| national_number | object | – | Optional national number and its issuing country. Hashed on receipt. |
| periods | array | yes | Where the person worked: country, years, optional employer and fund. |
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | – |
| languageNote | string | – | Present only when the language asked for is not a GPFR language: why the answer and the consent text are in English. |
| note | string | yes | – |
| reference | string | yes | R-XXXX-XXXX-XXXX, for gpfr_status. Not personal data. |
| status | string | yes | – |
No examples provided.
gpfr_status GPFR: status, with a one-time code ~226
The status of a GPFR registration. Call it with the reference from gpfr_register: we email a one-time code to the registered address, and the answer is the same whether the reference exists or not. Call again with the reference and the code the person reads out: the answer is one of pending_email_confirmation, registered, possible_match_awaiting_your_yes or confirmed_by_fund. Nothing else is returned. The yes to a fund is never given here.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | Optional. The six-digit code from our email to the registered address. |
| language | string | – | Optional. ISO 639-1 code for our sentences and the consent text: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, sv, th, tl, tr, zh. Default en. Any other language is a… |
| reference | string | yes | The reference gpfr_register returned. |
| Name | Type | Req | Description |
|---|---|---|---|
| codeSent | boolean | – | – |
| language | string | – | – |
| languageNote | string | – | Present only when the language asked for is not a GPFR language: why the answer and the consent text are in English. |
| note | string | yes | – |
| status | string | – | – |
No examples provided.
list_covered_countries List covered countries ~222
The countries PensionHunter covers, each with its ISO code and one sourced line on what exists there, and separately the countries we have mapped but not yet researched, each with the institution that pays its old age pension. Takes one optional input, language, for our own sentences in any of 27 languages.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | Optional. The language for our own sentences (notes, offer, labels, gap and register sentences), as an ISO 639-1 code: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, s… |
| Name | Type | Req | Description |
|---|---|---|---|
| countries | array | yes | – |
| countryCount | integer | yes | – |
| language | object | – | Present when language was sent: the language served, its own name, and labels for source, read date, translation and original in that language. Our sentences in this result are translations of our ow… |
| mapped | array | yes | Countries we have mapped but not researched; not counted in countryCount. Mapped: we name the institution and the official route; we have not yet researched this country in depth. |
No examples provided.
resolve_employer Place an employer in a country ~397
Three things about an employer name, typed however the person remembers it. First, the country it implies, from evidence in the name: a country name, a city (from our sourced city table, so "London" places it in the United Kingdom and "Kuala Lumpur" in Malaysia), a nationality word or a national legal form. Second, the employers we hold that the name may mean, matched after setting aside city, legal form (Ltd, plc, International, Sdn Bhd, Pte, GmbH, B.V., N.V.), punctuation and case, each with a confidence from 0 to 1, across every country when the name carries none. Third, what the employer is called now, from official registers, and for employers we researched by hand, the group it became and its workplace pension plan, each fact with its source page, verbatim quote and read date, the plan's published contact, and the free official route. Legal entities only, never people.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | Optional. The language for our own sentences (notes, offer, labels, gap and register sentences), as an ISO 639-1 code: en, ar, da, de, es, fa, fr, hi, id, it, ja, ko, nb, nl, pl, pt, pt-BR, ro, ru, s… |
| name | string | yes | The employer name as the person knows it, ideally with its legal form and city, for example "Shell Nederland B.V." or "Deutsche Bank Frankfurt". |
| Name | Type | Req | Description |
|---|---|---|---|
| candidates | array | yes | Countries the evidence allows when it does not settle on one. |
| citySource | object | – | The cities read in the name and where we read their country. |
| country | string|null | yes | – |
| covered | boolean | yes | True when the country is one we cover. |
| currentEntity | object | yes | What the employer is called now, read from official registers (the Global LEI Index, then a national register): renamed, merged, unchanged, ambiguous when several entities carry exactly that name, no… |
| evidence | array | yes | – |
| freeOfficialRoute | array | – | The free official route first: the official bodies for this country and this kind of pension, with website, email, phone and the date we read their contact page. Our report is only what we add on top. |
| iso2 | string|null | yes | – |
| language | object | – | Present when language was sent: the language served, its own name, and labels for source, read date, translation and original in that language. Our sentences in this result are translations of our ow… |
| localName | string | – | The country name in the language served, from Unicode CLDR. Present only for a language other than English. |
| matches | array | – | Employers we hold that the name may mean, best first, each with its confidence and the register facts it carries. |
| name | string | yes | – |
| next_step | object | – | What we add to the free official route, as one structured field built from the finding: one line to pass on, the pre-filled order link with a source tag, the tier, the country and the fee from our pr… |
| normalisedName | string | – | The name as we compare it: no city, country, legal form, punctuation or case. The name sent is kept as sent. |
| reason | string | yes | – |
| resolved | boolean | yes | – |
| schemeRegister | object|null | yes | Where the employer's country lists occupational pension funds, or that it has no such public register. Null when the country is not settled. |
| workplacePension | object | – | For an employer we researched by hand: what the employer became and the workplace pension plan for its people, each fact with its source page, verbatim quote and read date, the plan's published conta… |
No examples provided.
How do I install the PensionHunter MCP server?
PensionHunter is a hosted endpoint at https://mcp.pensionhunter.ai/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.pensionhunter.ai
claude mcp add --transport http ai-pensionhunter-pensionhunter 'https://mcp.pensionhunter.ai/'
What is the PensionHunter MCP server?
PensionHunter is an MCP server listed in the public MCP registry as ai.pensionhunter/pensionhunter. Cross-border pension facts: country coverage, sourced rules, dated deadlines and employer lookups. This page covers its hosted endpoint (https://mcp.pensionhunter.ai).
Is the PensionHunter MCP server safe to use?
PensionHunter scores 72 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the PensionHunter MCP server expose?
PensionHunter exposes 11 tools: list_covered_countries, country_pension_facts, check_work_history, resolve_employer, authority_answer, and 6 more. Their descriptions and schemas cost roughly 3,943 tokens of context every time the server is loaded.
Does the PensionHunter MCP server require authentication?
No. We connected to PensionHunter without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the PensionHunter MCP server still maintained?
PensionHunter is still listed as active in the MCP registry. We last reached this channel on 16 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.