---
name: ota-news-mcp
description: Connect to the OTA News MCP server to list, read, create and update articles, OTA profiles, PR links and glossary terms on ota-news.com.
license: Authorised editors only. Requires OAuth credentials issued by HolidayHero B.V.
---

# Editing ota-news.com over MCP

OTA News exposes a Model Context Protocol server for editorial work. Unlike the
public read surface (see the `ota-news-research` skill) this one writes, and it
requires authorisation.

## Connect

| | |
|---|---|
| Endpoint | `https://ota-news.com/mcp` |
| Transport | Streamable HTTP |
| Server name | `ota-news` |
| Server card | `https://ota-news.com/.well-known/mcp/server-card.json` |

## Authorise

The server is an OAuth 2.1 protected resource. Discovery documents:

- `https://ota-news.com/.well-known/oauth-protected-resource` — resource id, scopes, authorization servers
- `https://ota-news.com/.well-known/oauth-authorization-server` — issuer, endpoints, dynamic client registration
- `https://ota-news.com/auth.md` — how an agent gets credentials in the first place

Dynamic client registration is open at `POST /oauth/register`. Run the standard
authorization-code + PKCE flow, then send the access token as
`Authorization: Bearer {token}`. A human account holder must approve the grant —
there is no anonymous write access.

## Tools

Read:

- `list-otas`, `list-categories` — always call these first; every write needs a valid OTA and category id
- `list-articles`, `get-article`
- `list-glossary-terms`, `get-glossary-term`
- `list-pr-links`

Write:

- `create-article`, `update-article`
- `create-ota`, `update-ota-profile`
- `create-glossary-term`
- `create-pr-link`, `update-pr-link`, `delete-pr-link`

## Writing an article

Bodies are markdown. An article belongs to exactly one OTA and one author. On
publish the site automatically generates an AI summary and a vector embedding,
computes related articles and posts to X — so publishing is an outward-facing
action. Draft first, and let a human decide when it goes live.

Resolve ids before you write: `list-otas` and `list-categories` return the only
valid values, and inventing one fails the write rather than silently guessing.

## Errors

Write tools return a `userErrors` array. A non-empty array means the write was
rejected and nothing was persisted; an empty array means it succeeded. Check it
rather than assuming success.
