Medialyst MCP
Medialyst is the data layer for your agent. The remote MCP server exposes a small set of authenticated research and monitoring tools:
https://medialyst.ai/api/mcpMost tools share a service contract with Medialyst's public developer API.
list_journalist_requests is intentionally MCP-only.
Want a full PR agent, not just tools?
Medialyst provides the data; newsjack.sh is the open-source agent that turns it into a full PR team — angles, fit-scored journalist lists, and drafted pitches. If you'd rather not wire the primitives together yourself, start there.
Authentication
You have two ways to connect, and both grant the same scoped, org-level access:
- OAuth — for chat clients like Claude.ai and ChatGPT. Paste the MCP URL, authorize Medialyst when prompted, pick your organization, and you're in. No API key to paste.
- API key — for clients that send an
Authorizationheader (Claude Code, Cursor, Codex) and for CI. Create a key from Developers, store it in secret storage or an environment variable, and send it as a bearer token:
Authorization: Bearer <YOUR_API_KEY>Clients without custom headers or OAuth
If a client can't attach an Authorization header or use OAuth, pass the key on the URL as ?api_key=<YOUR_API_KEY>. The server strips the query parameter and treats it as the same bearer token. Because the key sits in the URL, intermediate proxies, CDNs, or access logs may record it — use a dedicated key with the minimum scopes, and revoke and rotate it from Developers if it leaks.
Required Scopes
| Scope | Needed for |
|---|---|
| Valid credential; no special scope | Polling the zero-credit journalist-request feed; all six platforms are included for free |
| Active Scale plan; no special scope | Polling the zero-credit journalist-moves feed |
news:search | Searching recent news coverage |
media_lists:manage | Looking up articles/publications, enriching journalists, and polling enrichment jobs |
Connect Your Agent
Claude.ai and ChatGPT (OAuth)
Add Medialyst as a custom connector with just the URL — no header, no key:
- Settings → Connectors → Add custom connector
- Name:
Medialyst - Remote MCP server URL:
https://medialyst.ai/api/mcp - Leave advanced settings empty. Add it, then authorize Medialyst with OAuth when prompted and choose your organization.
ChatGPT custom connectors are currently rolling out for Plus and Pro.
Claude Code
export MEDIALYST_API_KEY="<YOUR_API_KEY>"
claude mcp add --transport http --scope user medialyst https://medialyst.ai/api/mcp \
--header "Authorization: Bearer $MEDIALYST_API_KEY"Verify in Claude Code:
/mcpClaude Desktop
{
"mcpServers": {
"medialyst": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://medialyst.ai/api/mcp",
"--header",
"Authorization: ${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer <YOUR_API_KEY>"
}
}
}
}Cursor
{
"mcpServers": {
"medialyst": {
"url": "https://medialyst.ai/api/mcp",
"headers": {
"Authorization": "Bearer ${env:MEDIALYST_API_KEY}"
}
}
}
}Then start Cursor from a shell where the key is exported:
export MEDIALYST_API_KEY="<YOUR_API_KEY>"
cursor .Codex
[mcp_servers.medialyst]
url = "https://medialyst.ai/api/mcp"
bearer_token_env_var = "MEDIALYST_API_KEY"Then export the key before starting Codex:
export MEDIALYST_API_KEY="<YOUR_API_KEY>"
codex mcp listCommand line (newsjack)
newsjack is the open-source PR CLI built on Medialyst. Connect it with one command:
newsjack loginApprove the browser prompt and the CLI authenticates with OAuth device login — no API key to copy out of the terminal. Install instructions live at newsjack.sh. CI and power users can still set a MEDIALYST_API_KEY instead.
Other Clients
Use the Streamable HTTP endpoint and bearer header directly:
MCP URL: https://medialyst.ai/api/mcp
Transport: Streamable HTTP
Header: Authorization: Bearer <YOUR_API_KEY>If your client only supports stdio servers, bridge to the remote endpoint with
mcp-remote.
Tool Surface
| MCP tool | Backing public surface | Scope |
|---|---|---|
get_credit_balance | GET /api/v1/credits/balance | API key |
lookup_article | GET /api/v1/articles/lookup | media_lists:manage |
lookup_articles | POST /api/v1/articles/lookup:batch | media_lists:manage |
lookup_publication | GET /api/v1/publications/lookup | media_lists:manage |
lookup_publications | POST /api/v1/publications/lookup:batch | media_lists:manage |
list_journalist_requests | MCP-only | Any valid credential; no special scope |
list_journalist_moves | GET /api/v1/journalist-moves | API key; active Scale plan |
search_news | POST /api/v1/news/search | news:search |
query_pr_calendar | POST /api/v1/pr-calendar/query | news:search |
enrich_journalists | POST /api/v1/journalists/enrich | media_lists:manage |
get_journalist_enrichment_job | GET /api/v1/journalist-enrichment-jobs/:jobId | media_lists:manage |
Only these 11 tools are exposed. The public OpenAPI operations
POST /api/v1/media-lists:create-async and GET /api/v1/jobs/:jobId are
deliberately REST-only and are not hosted MCP tools. Workflow row reads and
share-link creation also stay outside the hosted MCP surface.
Example Workflows
Screen new journalist requests
Ask your agent to screen new source requests every hour:
List journalist requests observed after 2026-08-09T13:00:00Z. Keep draining pages, screen each request, and save the final next cursor for the next hourly run.Expected sequence:
- Call
list_journalist_requestswithsinceand an optionallimitfrom 1 to 250. - Process the returned requests idempotently by stable
id. - While
page.has_moreis true, call the tool again with onlypage.next_cursorascursor. - When
page.has_moreis false, save that same cursor for the next hour.
See the Journalist Requests MCP guide for timestamp collision handling, the normalized schema, source exclusions, privacy policy, and a checkpointing cron example.
Track journalist moves
Ask your agent to poll journalist moves every morning (requires a Scale plan):
List journalist moves observed after 2026-08-14T00:00:00Z. Keep draining pages, record each move, and save the final next cursor for tomorrow's run.Expected sequence:
- Call
list_journalist_moveswithsinceand an optionallimitfrom 1 to 250. - Process the returned moves idempotently by stable
id. - While
page.has_moreis true, call the tool again with onlypage.next_cursorascursor. - When
page.has_moreis false, save that same cursor for the next morning.
See the Journalist Moves API guide for the de-duplication rule, the match-state default, and a checkpointing cron example.
Look up articles and publications
Use lookup_article when you need canonical metadata for one known article;
set include_markdown: true only when the extracted body is needed. Use
lookup_articles for 1-10 URLs. Batch article lookup never includes Markdown.
Use lookup_publication to resolve an article or outlet URL to canonical
publication metadata. Use lookup_publications for 1-25 cached/default URLs.
When force_refresh: true, publication batches are capped at five URLs and may
be rate-limited more aggressively, so prefer cached/default lookup unless stale
metadata is unacceptable.
Article lookup costs 0.1 credit per successful URL. Publication lookup costs 0.01 credit per successful URL. Per-URL failures cost 0 credits for both, so batch budgets depend on successful results rather than submitted URL count.
{
"urls": [
"https://example.com/story-one",
"https://example.org/story-two"
],
"force_refresh": true
}Research news and enrich journalists
Ask your agent:
Search recent AI agents coverage and find 5 journalists I should pitch on a related angle.Expected sequence:
get_credit_balancequery_pr_calendarwhen the user needs planning moments or pitch timingsearch_newswith a specific recency window when discovering journalists from coverageenrich_journalistswith a known journalist reference or a selected article URL, plusfit_context.pitchget_journalist_enrichment_jobuntil the job is complete or failed
For a known journalist, use this canonical input:
{
"from": [
{
"type": "journalist_reference",
"name": "Jane Doe",
"publication": "The Daily Example"
}
]
}Notes
list_journalist_requestsrequires exactly one of an exclusive RFC 3339sincetimestamp or the preceding opaquecursor. It is free, costs zero credits, requires no special scope, and returns at most 250 records per page.- The journalist-request feed includes Connectively (formerly Featured), HARO, Twitter/X, LinkedIn, MentionMatch, and Substack for every authenticated account, all for free. The feed does not expose private email, paid contact data, upstream IDs, or credentials.
- Every
list_journalist_requestsresponse carries a mandatory top-levelnoticefield. Screening, ranking, filtering, and summarizing are permitted; automating outreach is a Terms of Service violation. See Journalist Requests. list_journalist_movesrequires exactly one of an exclusive RFC 3339sincetimestamp or the preceding opaquecursor. It requires an active Scale plan, costs zero credits, returns at most 250 de-duplicated moves per page, and filters on when Medialyst observed each move — not the move's effective date.search_newsreturns up to 10 results per call. Usepage: 2,page: 3, and so on for deeper coverage. Do not use the deprecatednumparameter.query_pr_calendaris free, costs 0 credits per successful call, and returns source-backed PR moments with pitch timing fields.lookup_articleaccepts one absolute HTTP(S) URL and optionalinclude_markdown;lookup_articlesaccepts 1-10 absolute URLs and has no Markdown option.lookup_publicationaccepts one absolute HTTP(S) URL and optionalforce_refresh;lookup_publicationsaccepts 1-25 URLs normally or at most five withforce_refresh: true.- Article lookups cost 0.1 credit per successful URL; publication lookups cost 0.01 credit per successful URL; per-URL failures cost 0 credits.
- All four lookup tools require
media_lists:manageand use the public REST routes, so auth, scopes, logs, credits, rate limits, and errors match direct API calls. journalist_referencerequiresnameplus at least one ofpublication,domain, orurl. Use it when the journalist is already known.article_urlremains supported for enriching the author of a real article. Reference and article sources can be mixed in the same request.enrich_journalistsis async-only and returns a job id immediately.fit_context.pitchreturns scored journalist research and personalized angle output when available.options.waitandoptions.timeout_msonenrich_journalistsare deprecated compatibility no-ops. Pollget_journalist_enrichment_jobinstead.- Public v1 has no send endpoint. Review and sending stay in the Medialyst app.
Troubleshooting
| Symptom | What to check |
|---|---|
401 Unauthorized | Missing, expired, or revoked credential. For OAuth clients, reconnect the connector to re-authorize. For API-key clients, verify the bearer header or api_key query fallback. |
403 Forbidden | The credential is valid but lacks the required scope. |
402 Payment Required | Credits or usage limits block the operation. |
| Fewer tools visible than expected | Ask your client to refresh or search MCP tools by name. The current public surface has 11 tools. |
| Validation errors | Lookup URLs must be absolute HTTP(S) URLs. Article batches accept at most 10 URLs and no Markdown option. Publication batches accept 25 URLs normally or five with force_refresh: true. For list_journalist_requests or list_journalist_moves, provide exactly one since or cursor; reuse the last successful cursor. For journalist_reference, provide name plus publication, domain, or a real identifying url. |
Build a Full Agent
Medialyst is the data layer. If you want the whole PR workflow — finding angles, building a fit-scored journalist list, and drafting pitches — use newsjack.sh, the open-source agent built on Medialyst by the team behind it. It connects with OAuth device login and ships opinionated skills for the full PR loop, so you don't have to assemble the primitives yourself.
Prefer to build your own agent on the raw primitives? See PR Agents on Medialyst.