Koskamo

The Moorish Times MCP

An MCP server that allows AI agents to search, read, and cite content from The Moorish Times, a bilingual magazine on Moroccan history, heritage, culture, and current affairs. It supports generating timelines and citations without requiring user sign-in.

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.

The Moorish Times MCP logo, by The Moorish TimesVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by The Moorish Times
MCP endpoint (Streamable HTTP)
https://mcp.moorish.cloud/mcp
Vendor documentation

What you can do with it

  • Search for articles and news briefs
  • Read full content in French or English
  • Generate timelines of events
  • Cite sources with attribution links

Source and maintenance

Vendor evidenceRegistry 2.4.0

Protocol and capabilities

Server
moorish-times 2.4.0
MCP protocol
2025-06-18
Tools
12 advertised
Resources
18 advertised
Resource templates
5 advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

The Moorish Times (moorishtimes.com) is a bilingual magazine on Moroccan history, heritage, culture and current affairs: French first, with an English edition. Find pieces with search (filters for section, tags and dates), whats_new for a digest, timeline or series to follow a story, site_map and list_tags to browse. Read one with fetch. send_to_newsroom passes a tip or correction to the newsroom, only with the user's consent. Every result carries its page url and publication date, and get_sources gives a piece's own references. A piece with no English edition comes back in French, marked english_edition: false. When search finds nothing close, the magazine has not covered the topic.

Tools

12 advertised

search — Search articles and news
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search every article and news brief by words, section, tags, author and date range, in French or English. Accent-insensitive keyword match first, then pieces close in meaning (match: semantic) when keywords find few. Leave query empty to browse newest first. Returns JSON {results: [{id, title, url, summary, published, ...}], next, total}; pass next as cursor for more.

search input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "sort": {
      "enum": [
        "relevance",
        "newest",
        "oldest"
      ],
      "type": "string",
      "default": "relevance"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Every tag must be present, in French or English, e.g. [\"Casablanca\", \"Finance\"]. See list_tags."
    },
    "type": {
      "enum": [
        "article",
        "news"
      ],
      "type": "string",
      "description": "article for long-form features, news for briefs."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "description": "Words to look for, e.g. zellige, Tanger Med, Guerre des Sables."
    },
    "since": {
      "type": "string",
      "description": "today, week, month, year, or a date (2026-09-01)."
    },
    "until": {
      "type": "string",
      "description": "A date, inclusive."
    },
    "author": {
      "type": "string",
      "description": "An author's slug or name from site_map, e.g. amerruki."
    },
    "cursor": {
      "type": "string"
    },
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "default": "fr",
      "description": "Edition: fr (primary) or en."
    },
    "category": {
      "enum": [
        "hist",
        "cult",
        "pol",
        "actu",
        "sport",
        "eco"
      ],
      "type": "string",
      "description": "Section: hist history, cult culture, pol politics, actu current affairs, sport, eco economy."
    }
  }
}
search output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "results",
    "total"
  ],
  "properties": {
    "next": {
      "type": [
        "string",
        "null"
      ],
      "description": "Cursor for the next page, absent at the end."
    },
    "total": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Matches across all pages."
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "summary",
          "type",
          "category",
          "tags",
          "author",
          "published",
          "featured",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "news/<slug> or articles/<slug>; pass to fetch, related, get_sources."
          },
          "url": {
            "type": "string",
            "description": "Page URL on moorishtimes.com."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "enum": [
              "article",
              "news"
            ],
            "type": "string"
          },
          "match": {
            "enum": [
              "keyword",
              "semantic"
            ],
            "type": "string",
            "description": "How search found it."
          },
          "title": {
            "type": "string"
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "summary": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "description": "hist, cult, pol, actu, sport or eco."
          },
          "featured": {
            "type": "boolean",
            "description": "On the front page (a la une)."
          },
          "published": {
            "type": "string",
            "description": "ISO 8601 publication time."
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
search annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch — Read one piece
Advertised by the server during the last successful anonymous check.
Advertised read-only

The full text of one article or news brief, as Markdown with front matter (title, url, date, author, tags, translation link) and its references. format summary gives the front matter and summary only; outline gives the section headings. Falls back to French when the piece has no English edition, and says so. Returns JSON {id, title, text, url, metadata}.

fetch input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "An id from search (news/<slug> or articles/<slug>) or a moorishtimes.com page URL in either language."
    },
    "format": {
      "enum": [
        "full",
        "summary",
        "outline"
      ],
      "type": "string",
      "default": "full"
    },
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "description": "Edition: fr or en. Defaults to the reference's own edition, else fr."
    }
  }
}
fetch output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id",
    "title",
    "text",
    "url",
    "metadata"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "description": "Page URL on moorishtimes.com."
    },
    "text": {
      "type": "string",
      "description": "Markdown with front matter."
    },
    "title": {
      "type": "string"
    },
    "metadata": {
      "type": "object",
      "required": [
        "locale",
        "english_edition",
        "translation",
        "type",
        "category",
        "tags",
        "author",
        "published"
      ],
      "properties": {
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "type": {
          "type": "string"
        },
        "author": {
          "type": [
            "string",
            "null"
          ]
        },
        "locale": {
          "enum": [
            "fr",
            "en"
          ],
          "type": "string"
        },
        "updated": {
          "type": [
            "string",
            "null"
          ]
        },
        "category": {
          "type": "string"
        },
        "published": {
          "type": "string"
        },
        "translation": {
          "type": [
            "string",
            "null"
          ]
        },
        "english_edition": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
fetch annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
whats_new — What's new
Advertised by the server during the last successful anonymous check.
Advertised read-only

A digest of recent pieces grouped by section, featured pieces first: what happened in Morocco today, this week or this month according to The Moorish Times.

whats_new input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "tag": {
      "type": "string"
    },
    "since": {
      "type": "string",
      "default": "week",
      "description": "today, week, month, or a date."
    },
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "default": "fr",
      "description": "Edition: fr (primary) or en."
    },
    "category": {
      "enum": [
        "hist",
        "cult",
        "pol",
        "actu",
        "sport",
        "eco"
      ],
      "type": "string",
      "description": "Section: hist history, cult culture, pol politics, actu current affairs, sport, eco economy."
    },
    "featured_only": {
      "type": "boolean",
      "default": false
    }
  }
}
whats_new output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "groups"
  ],
  "properties": {
    "groups": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "category",
          "label",
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "summary",
                "type",
                "category",
                "tags",
                "author",
                "published",
                "featured",
                "url"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "news/<slug> or articles/<slug>; pass to fetch, related, get_sources."
                },
                "url": {
                  "type": "string",
                  "description": "Page URL on moorishtimes.com."
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "type": {
                  "enum": [
                    "article",
                    "news"
                  ],
                  "type": "string"
                },
                "match": {
                  "enum": [
                    "keyword",
                    "semantic"
                  ],
                  "type": "string",
                  "description": "How search found it."
                },
                "title": {
                  "type": "string"
                },
                "author": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "summary": {
                  "type": "string"
                },
                "category": {
                  "type": "string",
                  "description": "hist, cult, pol, actu, sport or eco."
                },
                "featured": {
                  "type": "boolean",
                  "description": "On the front page (a la une)."
                },
                "published": {
                  "type": "string",
                  "description": "ISO 8601 publication time."
                }
              },
              "additionalProperties": false
            }
          },
          "label": {
            "type": "string"
          },
          "category": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
whats_new annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
site_map — Site map
Advertised by the server during the last successful anonymous check.
Advertised read-only

What the magazine covers: sections with counts and URLs, the most used tags, featured pieces, author pages and series. Start here to browse.

site_map input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "default": "fr",
      "description": "Edition: fr (primary) or en."
    }
  }
}
site_map output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "site",
    "sections",
    "tags",
    "featured",
    "authors",
    "series"
  ],
  "properties": {
    "site": {
      "type": "object",
      "required": [
        "fr",
        "en",
        "items"
      ],
      "properties": {
        "en": {
          "type": "string"
        },
        "fr": {
          "type": "string"
        },
        "items": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      },
      "additionalProperties": false
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "tag",
          "fr",
          "en",
          "count"
        ],
        "properties": {
          "en": {
            "type": "string"
          },
          "fr": {
            "type": "string"
          },
          "tag": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          }
        },
        "additionalProperties": false
      }
    },
    "series": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "fr",
          "en"
        ],
        "properties": {
          "en": {
            "type": [
              "string",
              "null"
            ]
          },
          "fr": {
            "type": "string"
          },
          "tag": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "title": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "authors": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "count",
          "fr",
          "en"
        ],
        "properties": {
          "en": {
            "type": [
              "string",
              "null"
            ]
          },
          "fr": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          }
        },
        "additionalProperties": false
      }
    },
    "featured": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "summary",
          "type",
          "category",
          "tags",
          "author",
          "published",
          "featured",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "news/<slug> or articles/<slug>; pass to fetch, related, get_sources."
          },
          "url": {
            "type": "string",
            "description": "Page URL on moorishtimes.com."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "enum": [
              "article",
              "news"
            ],
            "type": "string"
          },
          "match": {
            "enum": [
              "keyword",
              "semantic"
            ],
            "type": "string",
            "description": "How search found it."
          },
          "title": {
            "type": "string"
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "summary": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "description": "hist, cult, pol, actu, sport or eco."
          },
          "featured": {
            "type": "boolean",
            "description": "On the front page (a la une)."
          },
          "published": {
            "type": "string",
            "description": "ISO 8601 publication time."
          }
        },
        "additionalProperties": false
      }
    },
    "sections": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "label",
          "count",
          "fr",
          "en"
        ],
        "properties": {
          "en": {
            "type": "string"
          },
          "fr": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "label": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
site_map annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
series — Series
Advertised by the server during the last successful anonymous check.
Advertised read-only

Running stories the desk follows as one series, such as the 2026 elections or the Sahara. Without a slug, lists every series with its count and latest piece; with one, gives every piece in reading order, oldest first.

series input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "slug": {
      "type": "string",
      "description": "A series slug from the list, e.g. elections."
    },
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "default": "fr",
      "description": "Edition: fr (primary) or en."
    }
  }
}
series output schema
{
  "type": "object",
  "anyOf": [
    {
      "type": "object",
      "required": [
        "series"
      ],
      "properties": {
        "series": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "slug",
              "title",
              "tag",
              "count",
              "latest"
            ],
            "properties": {
              "tag": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "count": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991
              },
              "title": {
                "type": "string"
              },
              "latest": {
                "anyOf": [
                  {
                    "type": "object",
                    "required": [
                      "id",
                      "title",
                      "summary",
                      "type",
                      "category",
                      "tags",
                      "author",
                      "published",
                      "featured",
                      "url"
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "news/<slug> or articles/<slug>; pass to fetch, related, get_sources."
                      },
                      "url": {
                        "type": "string",
                        "description": "Page URL on moorishtimes.com."
                      },
                      "tags": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "type": {
                        "enum": [
                          "article",
                          "news"
                        ],
                        "type": "string"
                      },
                      "match": {
                        "enum": [
                          "keyword",
                          "semantic"
                        ],
                        "type": "string",
                        "description": "How search found it."
                      },
                      "title": {
                        "type": "string"
                      },
                      "author": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "summary": {
                        "type": "string"
                      },
                      "category": {
                        "type": "string",
                        "description": "hist, cult, pol, actu, sport or eco."
                      },
                      "featured": {
                        "type": "boolean",
                        "description": "On the front page (a la une)."
                      },
                      "published": {
                        "type": "string",
                        "description": "ISO 8601 publication time."
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    {
      "type": "object",
      "required": [
        "slug",
        "title",
        "tag",
        "items"
      ],
      "properties": {
        "tag": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "id",
              "title",
              "summary",
              "type",
              "category",
              "tags",
              "author",
              "published",
              "featured",
              "url"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "news/<slug> or articles/<slug>; pass to fetch, related, get_sources."
              },
              "url": {
                "type": "string",
                "description": "Page URL on moorishtimes.com."
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "type": {
                "enum": [
                  "article",
                  "news"
                ],
                "type": "string"
              },
              "match": {
                "enum": [
                  "keyword",
                  "semantic"
                ],
                "type": "string",
                "description": "How search found it."
              },
              "title": {
                "type": "string"
              },
              "author": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "summary": {
                "type": "string"
              },
              "category": {
                "type": "string",
                "description": "hist, cult, pol, actu, sport or eco."
              },
              "featured": {
                "type": "boolean",
                "description": "On the front page (a la une)."
              },
              "published": {
                "type": "string",
                "description": "ISO 8601 publication time."
              }
            },
            "additionalProperties": false
          }
        },
        "title": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
series annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
timeline — Follow a story
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every piece on a tag or topic in date order, oldest first, to follow how a story unfolded. Marks the first and latest mention.

timeline input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "tag": {
      "type": "string",
      "description": "A tag from list_tags, e.g. Diplomatie."
    },
    "type": {
      "enum": [
        "article",
        "news"
      ],
      "type": "string",
      "description": "article for long-form features, news for briefs."
    },
    "query": {
      "type": "string",
      "description": "Words, e.g. MINURSO or Tanger Med."
    },
    "since": {
      "type": "string"
    },
    "until": {
      "type": "string"
    },
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "default": "fr",
      "description": "Edition: fr (primary) or en."
    }
  }
}
timeline output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "summary",
          "type",
          "category",
          "tags",
          "author",
          "published",
          "featured",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "news/<slug> or articles/<slug>; pass to fetch, related, get_sources."
          },
          "url": {
            "type": "string",
            "description": "Page URL on moorishtimes.com."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "enum": [
              "article",
              "news"
            ],
            "type": "string"
          },
          "match": {
            "enum": [
              "keyword",
              "semantic"
            ],
            "type": "string",
            "description": "How search found it."
          },
          "title": {
            "type": "string"
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "summary": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "description": "hist, cult, pol, actu, sport or eco."
          },
          "featured": {
            "type": "boolean",
            "description": "On the front page (a la une)."
          },
          "published": {
            "type": "string",
            "description": "ISO 8601 publication time."
          }
        },
        "additionalProperties": false
      },
      "description": "Oldest first."
    }
  },
  "additionalProperties": false
}
timeline annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
related — Related pieces
Advertised by the server during the last successful anonymous check.
Advertised read-only

Pieces that share tags and section with a given piece, the closest first.

related input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "An id from search (news/<slug> or articles/<slug>) or a moorishtimes.com page URL in either language."
    },
    "limit": {
      "type": "integer",
      "default": 5,
      "maximum": 10,
      "minimum": 1
    },
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "description": "Edition: fr or en. Defaults to the reference's own edition, else fr."
    }
  }
}
related output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "summary",
          "type",
          "category",
          "tags",
          "author",
          "published",
          "featured",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "news/<slug> or articles/<slug>; pass to fetch, related, get_sources."
          },
          "url": {
            "type": "string",
            "description": "Page URL on moorishtimes.com."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "enum": [
              "article",
              "news"
            ],
            "type": "string"
          },
          "match": {
            "enum": [
              "keyword",
              "semantic"
            ],
            "type": "string",
            "description": "How search found it."
          },
          "title": {
            "type": "string"
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "summary": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "description": "hist, cult, pol, actu, sport or eco."
          },
          "featured": {
            "type": "boolean",
            "description": "On the front page (a la une)."
          },
          "published": {
            "type": "string",
            "description": "ISO 8601 publication time."
          }
        },
        "additionalProperties": false
      },
      "description": "Closest first."
    }
  },
  "additionalProperties": false
}
related annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_editions — French and English side by side
Advertised by the server during the last successful anonymous check.
Advertised read-only

Both editions of one piece aligned block by block, with both URLs. For readers comparing the languages or checking a translation.

compare_editions input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "An id from search (news/<slug> or articles/<slug>) or a moorishtimes.com page URL in either language."
    }
  }
}
compare_editions output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "urls",
    "rows"
  ],
  "properties": {
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "fr",
          "en"
        ],
        "properties": {
          "en": {
            "type": "string"
          },
          "fr": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "urls": {
      "type": "object",
      "required": [
        "fr",
        "en"
      ],
      "properties": {
        "en": {
          "type": [
            "string",
            "null"
          ]
        },
        "fr": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "aligned": {
      "type": "boolean"
    },
    "enBlocks": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "frBlocks": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  },
  "additionalProperties": false
}
compare_editions annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_sources — Sources and citation
Advertised by the server during the last successful anonymous check.
Advertised read-only

A piece's references, outbound links and image credits, plus a ready citation of the piece itself in APA, MLA or Chicago style.

get_sources input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "An id from search (news/<slug> or articles/<slug>) or a moorishtimes.com page URL in either language."
    },
    "style": {
      "enum": [
        "apa",
        "mla",
        "chicago"
      ],
      "type": "string",
      "default": "apa"
    },
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "description": "Edition: fr or en. Defaults to the reference's own edition, else fr."
    }
  }
}
get_sources output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "url",
    "citation",
    "references",
    "links",
    "credits"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Page URL on moorishtimes.com."
    },
    "links": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "credits": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "image",
          "caption",
          "credit"
        ],
        "properties": {
          "image": {
            "type": "string"
          },
          "credit": {
            "type": [
              "string",
              "null"
            ]
          },
          "caption": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "citation": {
      "type": "string"
    },
    "references": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
get_sources annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_tags — List tags
Advertised by the server during the last successful anonymous check.
Advertised read-only

Tags with the number of pieces carrying each, most used first, named in the asked edition with both names in the data. Use either name in search, whats_new and timeline.

list_tags input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "locale": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string",
      "default": "fr",
      "description": "Edition: fr (primary) or en."
    },
    "prefix": {
      "type": "string",
      "description": "Accent-insensitive start of the tag in either language, e.g. tan for Tanger."
    },
    "category": {
      "enum": [
        "hist",
        "cult",
        "pol",
        "actu",
        "sport",
        "eco"
      ],
      "type": "string",
      "description": "Section: hist history, cult culture, pol politics, actu current affairs, sport, eco economy."
    },
    "min_count": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "minimum": 1
    }
  }
}
list_tags output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "tags"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "tag",
          "fr",
          "en",
          "count"
        ],
        "properties": {
          "en": {
            "type": "string"
          },
          "fr": {
            "type": "string"
          },
          "tag": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
list_tags annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
send_to_newsroom — Message the newsroom
Advertised by the server during the last successful anonymous check.
Open-world

Send the newsroom a story tip, a correction, a rights or advertising request, or another message, on the user's behalf and with their consent. Write the message in the user's words; include their email in reply_to only if they want an answer. Agents with a token from https://moorishtimes.com/auth.md (scope newsroom:send) send it as a Bearer header on this connection; without one, sends are limited per network.

send_to_newsroom input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "kind",
    "message"
  ],
  "properties": {
    "kind": {
      "enum": [
        "story",
        "correction",
        "rights",
        "ads",
        "other"
      ],
      "type": "string",
      "description": "story (a tip), correction (an error in a piece; give its page), rights, ads or other."
    },
    "page": {
      "type": "string",
      "format": "uri",
      "description": "The moorishtimes.com page it is about, if any."
    },
    "message": {
      "type": "string",
      "maxLength": 5000,
      "minLength": 1,
      "description": "The message, in French or English."
    },
    "language": {
      "enum": [
        "fr",
        "en"
      ],
      "type": "string"
    },
    "reply_to": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "The user's email, only if they want a reply."
    }
  }
}
send_to_newsroom output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id",
    "status"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Reference for the message."
    },
    "status": {
      "type": "string",
      "const": "received"
    }
  },
  "additionalProperties": false
}
send_to_newsroom annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
report_missing — Report something you could not do
Advertised by the server during the last successful anonymous check.
Open-world

Tell The Moorish Times about a task a reader wanted that this server, the site or the API could not do. Describe the task, never the reader. No personal data.

report_missing input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "task",
    "description"
  ],
  "properties": {
    "task": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "The task in a few words, e.g. Read a piece in Arabic."
    },
    "description": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 1,
      "description": "What was wanted and what was missing. No names, emails or other personal data."
    }
  }
}
report_missing output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string",
      "const": "received"
    }
  },
  "additionalProperties": false
}
report_missing annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

4 advertised

morning_brief — Morning brief on Morocco

Advertised by the server during the last successful anonymous check.

A short brief of the last 24 hours from The Moorish Times.

locale
No description
sections
Comma-separated, e.g. eco,pol
explain_topic — Explain a topic with sources

Advertised by the server during the last successful anonymous check.

Explain a Moroccan history, heritage or current-affairs topic from The Moorish Times, with citations.

topic
No description (required)
locale
No description
follow_story — Follow a story

Advertised by the server during the last successful anonymous check.

How a story developed over time in The Moorish Times.

topic
A tag or words, e.g. MINURSO (required)
locale
No description
city_guide — City guide

Advertised by the server during the last successful anonymous check.

Heritage, culture and recent news about one Moroccan city.

city
e.g. Fes, Tanger, Rabat, Casablanca (required)
locale
No description

Resources

18 advertised

site — The Moorish Times site map

Advertised by the server during the last successful anonymous check.

Sections, tags, featured pieces, authors and series.

site URI
tmt://site

MIME type: text/markdown

Wealth of Morocco — Pieces by one author

Advertised by the server during the last successful anonymous check.

Wealth of Morocco URI
tmt://author/wealth-of-morocco

MIME type: text/markdown

Amerruki — Pieces by one author

Advertised by the server during the last successful anonymous check.

Amerruki URI
tmt://author/amerruki

MIME type: text/markdown

Moroccan Royal Archives — Pieces by one author

Advertised by the server during the last successful anonymous check.

Moroccan Royal Archives URI
tmt://author/moroccan-archives

MIME type: text/markdown

Moorish Movement — Pieces by one author

Advertised by the server during the last successful anonymous check.

Moorish Movement URI
tmt://author/moorishmovement

MIME type: text/markdown

Adil Astaib — Pieces by one author

Advertised by the server during the last successful anonymous check.

Adil Astaib URI
tmt://author/adil

MIME type: text/markdown

Carl Johnson — Pieces by one author

Advertised by the server during the last successful anonymous check.

Carl Johnson URI
tmt://author/carl-johnson

MIME type: text/markdown

Le Maure Malikite — Pieces by one author

Advertised by the server during the last successful anonymous check.

Le Maure Malikite URI
tmt://author/mauremalikite

MIME type: text/markdown

The Riffian Museum — Pieces by one author

Advertised by the server during the last successful anonymous check.

The Riffian Museum URI
tmt://author/riffian-museum

MIME type: text/markdown

Mazighan Daily — Pieces by one author

Advertised by the server during the last successful anonymous check.

Mazighan Daily URI
tmt://author/mazighan

MIME type: text/markdown

2026 parliamentary elections — One series, oldest piece first

Advertised by the server during the last successful anonymous check.

2026 parliamentary elections URI
tmt://series/elections

MIME type: text/markdown

Moroccan Sahara — One series, oldest piece first

Advertised by the server during the last successful anonymous check.

Moroccan Sahara URI
tmt://series/sahara

MIME type: text/markdown

History / Histoire — A section of the magazine

Advertised by the server during the last successful anonymous check.

History / Histoire URI
tmt://section/hist

MIME type: text/markdown

Culture / Culture — A section of the magazine

Advertised by the server during the last successful anonymous check.

Culture / Culture URI
tmt://section/cult

MIME type: text/markdown

Politics / Politique — A section of the magazine

Advertised by the server during the last successful anonymous check.

Politics / Politique URI
tmt://section/pol

MIME type: text/markdown

News / Actualité — A section of the magazine

Advertised by the server during the last successful anonymous check.

News / Actualité URI
tmt://section/actu

MIME type: text/markdown

Sport / Sport — A section of the magazine

Advertised by the server during the last successful anonymous check.

Sport / Sport URI
tmt://section/sport

MIME type: text/markdown

Economy / Économie — A section of the magazine

Advertised by the server during the last successful anonymous check.

Economy / Économie URI
tmt://section/eco

MIME type: text/markdown

author — Pieces by one author

Advertised by the server during the last successful anonymous check.

author URI template
tmt://author/{slug}{?locale,cursor}

MIME type: text/markdown

series — One series, oldest piece first

Advertised by the server during the last successful anonymous check.

series URI template
tmt://series/{slug}{?locale}

MIME type: text/markdown

section — A section of the magazine

Advertised by the server during the last successful anonymous check.

section URI template
tmt://section/{category}{?locale,cursor}

MIME type: text/markdown

tag — Pieces carrying one tag

Advertised by the server during the last successful anonymous check.

tag URI template
tmt://tag/{tag}{?locale,cursor}

MIME type: text/markdown

item — One piece as Markdown

Advertised by the server during the last successful anonymous check.

item URI template
tmt://item/{collection}/{slug}{?locale}

MIME type: text/markdown

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
664 ms
95th percentile latency
664 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 664 ms · metadata changed · 12 tool(s), 18 resource(s), 5 resource template(s), 4 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http the-moorish-times-mcp https://mcp.moorish.cloud/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add the-moorish-times-mcp --url https://mcp.moorish.cloud/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable the-moorish-times-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "the-moorish-times-mcp": {
      "url": "https://mcp.moorish.cloud/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "the-moorish-times-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.moorish.cloud/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start the-moorish-times-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "the-moorish-times-mcp": {
      "type": "http",
      "url": "https://mcp.moorish.cloud/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http the-moorish-times-mcp https://mcp.moorish.cloud/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "the-moorish-times-mcp": {
      "url": "https://mcp.moorish.cloud/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "the-moorish-times-mcp": {
      "serverUrl": "https://mcp.moorish.cloud/mcp"
    }
  }
}

Let your agent find its tools

Find servers like The Moorish Times MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run The Moorish Times 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.

Claim this listing