Read-only Maldives news, researched entity records, source documents and economy data.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The full text of one published article as markdown, with headline, byline, key takeaways and references, ending in its canonical URL. Partner content is returned labelled as partner content, not GMM journalism.
The article slug, the last part of its /news/ URL.
en (English) or dv (Dhivehi).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http newsroom https://www.goodmorningmaldives.com/mcp
The full text of one published article as markdown, with headline, byline, key takeaways and references, ending in its canonical URL. Partner content is returned labelled as partner content, not GMM journalism.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| slug* | string | The article slug, the last part of its /news/ URL. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"slug": {
"type": "string",
"description": "The article slug, the last part of its /news/ URL."
}
},
"additionalProperties": false
}One primary-source document: issuer, reference, dates, GMM plain-language summary, the file link and the news coverage that cites it, as markdown ending in its canonical URL.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| slug* | string | The document slug, the last part of its /documents/ URL. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"slug": {
"type": "string",
"description": "The document slug, the last part of its /documents/ URL."
}
},
"additionalProperties": false
}GMM's researched record of one entity: the dossier as markdown, plus the full record as structured data. Each fact carries a #fact-<id> anchor (cite as <canonical URL>#fact-<id>) and a grade, and the record has a recordRevision; cite both per the guide at /about/citing-gmm. This is GMM's own graded research, not company-supplied material.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| slug* | string | The entity slug, the last part of its /entities/ URL. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"slug": {
"type": "string",
"description": "The entity slug, the last part of its /entities/ URL."
}
},
"additionalProperties": false
}One edition of First Light, the daily morning brief, as markdown: its key number and numbered snippets with links. Omit date for the latest published edition. Only editions already released to readers are available.
| Argument | Type | Description |
|---|---|---|
| date | string | Edition date YYYY-MM-DD. Default: the latest published edition. |
| lang | string | en (English) or dv (Dhivehi). |
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Edition date YYYY-MM-DD. Default: the latest published edition."
},
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
}
},
"additionalProperties": false
}Reads any public GMM page as clean markdown, the same text the site serves at the page address with .md appended. Use it to follow a link from another result: /news/<slug>, /partner/<slug>, /briefs/<YYYY-MM-DD>, /entities (index) and /entities/<slug> (a researched dossier), /documents and /documents/<slug>, /projects and /projects/<slug>, /sections/<slug>, /topics/<slug>, /news and the home page /. Every page ends with its canonical URL. Paths outside that set are refused with a message.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| path* | string | A site path starting with /, e.g. /entities/eagle-hills. A /dv prefix selects Dhivehi. |
{
"type": "object",
"required": [
"path"
],
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"path": {
"type": "string",
"description": "A site path starting with /, e.g. /entities/eagle-hills. A /dv prefix selects Dhivehi."
}
},
"additionalProperties": false
}One tracked project: parties, value, financing, status against schedule, variations, documents and coverage, as markdown ending in its canonical URL.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| slug* | string | The project slug, the last part of its /projects/ URL. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"slug": {
"type": "string",
"description": "The project slug, the last part of its /projects/ URL."
}
},
"additionalProperties": false
}One economy tracker series: unit, frequency, source, the revision versions MMA has published and the latest observations. Says so plainly if the tracker database is unavailable.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Series id from list_tracker_series. |
| points | integer | Latest observations to return (1-240, default 60). |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"description": "Series id from list_tracker_series."
},
"points": {
"type": "integer",
"default": 60,
"maximum": 240,
"minimum": 1,
"description": "Latest observations to return (1-240, default 60)."
}
},
"additionalProperties": false
}The independent source library, newest first. Company-supplied documents are not listed here. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Results to return (1-100, default 30). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 30,
"maximum": 100,
"minimum": 1,
"description": "Results to return (1-100, default 30)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
}
},
"additionalProperties": false
}The index of GMM entity records, grouped by category (people, companies, institutions, places), optionally limited to one category slug — list_entity_categories has the slugs. Each record has a canonical URL, and says whether it carries a graded dossier. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| type | string | Entity type slug. |
| limit | integer | Results to return (1-100, default 50). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"type": {
"type": "string",
"description": "Entity type slug."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Results to return (1-100, default 50)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
}
},
"additionalProperties": false
}The categories GMM files its entity records under — people, companies, institutions, places and the rest — with each one's slug and how many records it holds. Read this first when you want to narrow a search: the slug is what the `type` argument of list_entities and search_entities takes.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
}
},
"additionalProperties": false
}The archive of published First Light morning briefs, newest first, with each edition date, title and snippet count. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Results to return (1-45, default 10). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 45,
"minimum": 1,
"description": "Results to return (1-45, default 10)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
}
},
"additionalProperties": false
}The indicators GMM charts in its articles and dashboards (tourism, fiscal, trade, state-owned enterprises), each with its unit, source note and the latest 24 observations. Pages are at /dashboard. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Results to return (1-100, default 30). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
| dashboard | string | Dashboard group: tourism-economy, sovereign-fiscal, trade-external, soe or other. |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 30,
"maximum": 100,
"minimum": 1,
"description": "Results to return (1-100, default 30)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
},
"dashboard": {
"type": "string",
"description": "Dashboard group: tourism-economy, sovereign-fiscal, trade-external, soe or other."
}
},
"additionalProperties": false
}GMM project tracker: public projects with status, value, employer and contractor, newest first. Optionally one status, e.g. under-construction or delayed. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Results to return (1-100, default 30). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
| status | string | announced, procurement, contracted, under-construction, delayed, on-hold, completed or cancelled. |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 30,
"maximum": 100,
"minimum": 1,
"description": "Results to return (1-100, default 30)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
},
"status": {
"type": "string",
"description": "announced, procurement, contracted, under-construction, delayed, on-hold, completed or cancelled."
}
},
"additionalProperties": false
}The newest published GMM news articles, optionally from one desk (section slug). Partner content is excluded. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Results to return (1-50, default 10). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
| section | string | Desk slug, e.g. economy. |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Results to return (1-50, default 10)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
},
"section": {
"type": "string",
"description": "Desk slug, e.g. economy."
}
},
"additionalProperties": false
}The economy tracker's catalogue: Maldives Monetary Authority statistical series grouped by theme, each with its latest figure and year-on-year change. Open one with get_tracker_series. Says so plainly if the tracker database is unavailable. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Results to return (1-200, default 100). |
| theme | string | Theme id: growth, tourism, prices, fiscal, money or external. |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 100,
"maximum": 200,
"minimum": 1,
"description": "Results to return (1-200, default 100)."
},
"theme": {
"type": "string",
"description": "Theme id: growth, tourism, prices, fiscal, money or external."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
}
},
"additionalProperties": false
}Full-text search of published GMM news articles (title, summary, body), newest first, with an optional desk (section slug) and date range. Partner content is excluded. Matching is the content store's: the words are matched as whole-word prefixes and accents count, so "Male" does NOT find "Malé". For a forgiving search, or one that also covers First Light, entity records, projects, documents and tracker pages, use search_site. Each result carries the canonical URL to cite. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| q* | string | Words to search for. |
| to | string | Latest publication date, YYYY-MM-DD, inclusive. |
| from | string | Earliest publication date, YYYY-MM-DD (Maldives time). |
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Results to return (1-50, default 10). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
| section | string |
Searches primary-source documents (laws, budgets, contracts, reports) by title, summary or reference. Open a match with get_document. Matching is the content store's substring match and accents count; search_site folds accents and searches every kind at once. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| q* | string | Words or a reference number. |
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Results to return (1-25, default 10). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Words or a reference number."
},
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Results to return (1-25, default 10)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
}
},
"additionalProperties": false
}Searches GMM's researched entity records (people, companies, institutions, places) by name, role or summary. Open a match with get_entity_record. Filter by type slug. Matching is the content store's substring match and accents count, so "Male" does not find "Malé"; search_site folds accents and searches every kind at once. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value.
| Argument | Type | Description |
|---|---|---|
| q* | string | Name or words to look for. |
| lang | string | en (English) or dv (Dhivehi). |
| type | string | Category slug, e.g. company or person. list_entity_categories has the slugs in use. |
| limit | integer | Results to return (1-25, default 10). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Name or words to look for."
},
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"type": {
"type": "string",
"description": "Category slug, e.g. company or person. list_entity_categories has the slugs in use."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Results to return (1-25, default 10)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
}
},
"additionalProperties": false
}Searches the whole publication at once and says what kind each hit is: news articles, First Light items, entity records, projects, source documents and tracker pages. This is the broad search — prefer it when the question is not already about one kind of thing, because search_articles and the other per-kind tools look only in their own kind. Matching ignores case AND accents, so "Male" finds "Malé"; a query wrapped in slashes (/min(istry|ister)/) is a regular expression. Every hit carries the canonical URL to cite. Searches the most recent 400 stories and 45 First Light editions, and all reference records. Paginates: when more results remain, the structured answer has a nextCursor (absent on the last page). To continue, call this tool again with the same arguments and cursor set to that value. The cursor moves every kind on together: each page shows the next `limit` hits of each kind.
| Argument | Type | Description |
|---|---|---|
| q* | string | Words to look for, or /a regular expression/. |
| lang | string | en (English) or dv (Dhivehi). |
| limit | integer | Hits to return per kind (1-25, default 8). |
| cursor | string | Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ). |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Words to look for, or /a regular expression/."
},
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 25,
"minimum": 1,
"description": "Hits to return per kind (1-25, default 8)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 30, 2026.
| Desk slug, e.g. economy. |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Words to search for."
},
"to": {
"type": "string",
"description": "Latest publication date, YYYY-MM-DD, inclusive."
},
"from": {
"type": "string",
"description": "Earliest publication date, YYYY-MM-DD (Maldives time)."
},
"lang": {
"enum": [
"en",
"dv"
],
"type": "string",
"default": "en",
"description": "en (English) or dv (Dhivehi)."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Results to return (1-50, default 10)."
},
"cursor": {
"type": "string",
"description": "Continue a previous result: the nextCursor it returned, unchanged. Only valid with the same other arguments (limit may differ)."
},
"section": {
"type": "string",
"description": "Desk slug, e.g. economy."
}
},
"additionalProperties": false
}