Perigon
Official Perigon news API: articles, stories, companies, journalists, monitors, and stats.
Que pouvez-vous faire avec Perigon ?
- Comma-separated tool names, profile aliases, or a mix.
- The filter intersects with what your credentials allow (API key scopes or your org’s MCP access for OAuth). It cannot expand access.
- Omit the parameter or pass an empty value → default set (opt-in tools stay off; smaller tool list for token savings).
- Pass
all→ scope-allowed default tools plus every opt-in catalogue tool (monitor write, platform helpers,get_source_by_id,get_top_topics,get_story_stats, and the rest). Scope-gated search tools still require the matching permission. - Unknown names are dropped. If every name is unknown, the default set is used.
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
claude mcp add --transport http perigon 'https://mcp.perigon.io/v1/mcp' --header 'Authorization: <Perigon API key, sent as a Bearer token>'
{
"mcpServers": {
"perigon": {
"type": "http",
"url": "https://mcp.perigon.io/v1/mcp",
"headers": {
"Authorization": "<Perigon API key, sent as a Bearer token>"
}
}
}
}
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Perigon MCP
Perigon's hosted MCP server for real-time news, entities, and monitors.
- **🚀 Quick start**
- **🔐 Authentication**
- **🔧 Choosing tools**
- **🛠️ Tools**
- **📚 Prompts and resources**
- **📊 Signal Insights workflow**
- **💡 Prompting tips**
- **📦 MCP Registry**
- **💻 Local development**
- **👥 Contributing and maintainers**
- **⚖️ License**
Quick start
Endpoint: https://mcp.perigon.io/v1/mcp
Try it in the playground (requires a signed-in Perigon dashboard session). Human-oriented setup: perigon.io/docs/api/mcp. Install with an agent: pass perigon.io/mcp.md to your AI client and follow the steps (OAuth sign-in, no API key in chat).
OAuth (recommended)
Add the server URL only. On first connect, the client discovers OAuth metadata and opens Perigon sign-in. See Authentication.
Native Streamable HTTP:
{
"mcpServers": {
"perigon": {
"url": "https://mcp.perigon.io/v1/mcp",
"type": "http"
}
}
}
mcp-remote (clients without native HTTP):
{
"mcpServers": {
"perigon": {
"command": "npx",
"args": ["-y", "mcp-remote@latest", "https://mcp.perigon.io/v1/mcp"]
}
}
}
Claude Code:
claude mcp add --transport http perigon https://mcp.perigon.io/v1/mcp
Then run /mcp in Claude Code and choose Authenticate when prompted.
Codex CLI — add to ~/.codex/config.toml:
[mcp_servers.perigon]
url = "https://mcp.perigon.io/v1/mcp"
Then run codex mcp login perigon.
API key (scripts and pinned keys)
Use when the client cannot complete OAuth or you need a fixed key in config. Keys from perigon.io/dev/keys.
Native Streamable HTTP:
{
"mcpServers": {
"perigon": {
"url": "https://mcp.perigon.io/v1/mcp",
"type": "http",
"headers": {
"Authorization": "Bearer YOUR_PERIGON_API_KEY"
}
}
}
}
mcp-remote:
{
"mcpServers": {
"perigon": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://mcp.perigon.io/v1/mcp",
"--header",
"Authorization: Bearer ${PERIGON_API_KEY}"
],
"env": {
"PERIGON_API_KEY": "YOUR_PERIGON_API_KEY"
}
}
}
}
Claude Code:
claude mcp add --transport http perigon https://mcp.perigon.io/v1/mcp \
--header "Authorization: Bearer YOUR_PERIGON_API_KEY"
SSE at /v1/sse exists for legacy clients. Use Streamable HTTP for new integrations.
Authentication
The MCP endpoint accepts Authorization: Bearer credentials in two forms:
| Method | Bearer value | Best for |
|---|---|---|
| OAuth | MCP access token from the Perigon authorization flow | Desktop and IDE MCP clients; access follows your org membership |
| API key | Perigon API key from the developer dashboard | Scripts, mcp-remote, or configs that pin a key |
OAuth
Hosted discovery (production):
- Protected resource:
https://mcp.perigon.io/.well-known/oauth-protected-resource(alias:https://mcp.perigon.io/.well-known/oauth-protected-resource/v1/mcp) - Authorization server metadata:
https://mcp.perigon.io/.well-known/oauth-authorization-server
Clients discover the authorization, token, and registration endpoints from the authorization server metadata (PKCE required).
The client completes the standard authorization-code flow with PKCE, then sends the resulting access token on every MCP request.
- Sign-in requires a verified Perigon user with at least User role in the organization.
- Usage is billed to your organization. No API key is needed in the client.
- Revoking MCP access or removing a member takes effect on the next request.
Unauthenticated requests receive 401 with a WWW-Authenticate header pointing at the protected-resource metadata URL.
API key
Create or copy a key at perigon.io/dev/keys and set it in the client’s Authorization header (see Quick start examples). Scopes and quotas follow that key.
Choosing tools
Append ?tools= to the MCP URL to limit the session. ?tool= is an alias and wins if both are present.
https://mcp.perigon.io/v1/mcp?tools=search_news_articles,search_news_stories
https://mcp.perigon.io/v1/mcp?tools=research
https://mcp.perigon.io/v1/mcp?tools=research,create_monitor
https://mcp.perigon.io/v1/mcp?tools=all
- Comma-separated tool names, profile aliases, or a mix.
- The filter intersects with what your credentials allow (API key scopes or your org’s MCP access for OAuth). It cannot expand access.
- Omit the parameter or pass an empty value → default set (opt-in tools stay off; smaller tool list for token savings).
- Pass
all→ scope-allowed default tools plus every opt-in catalogue tool (monitor write, platform helpers,get_source_by_id,get_top_topics,get_story_stats, and the rest). Scope-gated search tools still require the matching permission. - Unknown names are dropped. If every name is unknown, the default set is used.
| Profile | Tools |
|---|---|
research | search_news_articles, search_news_stories, search_story_history, search_vector_news, summarize_news, search_journalists, search_sources, search_people, search_companies, search_topics, the five stats tools, get_top_topics, get_source_by_id, get_api_access. Not Wikipedia, and not the company / person / location shortcuts. |
monitoring | All monitor tools (including create_monitor / update_monitor) plus every Signal Insights tool. |
platform | watchlists, create_watchlist, update_watchlist, source_groups, create_source_group, update_source_group, contact_points, article_refresh, get_api_access. |
minimal | search_news_articles, the five stats tools, get_api_access. |
get_story_stats is not in any profile. Request it by name. Requires the CLUSTERS scope.
Tools
Availability:
- Default — registered when
?tools=is omitted (and the key has the listed scope, if any). - Scope — registered only when the key has that permission.
- Opt-in — omitted from the default set. Request by name, profile, or
?tools=all. Registration is not the same as API access.
Search
| Tool | Availability | Description |
|---|---|---|
search_news_articles | Default | Keyword and filter search over individual articles, including Boolean queries. |
search_news_stories | Scope: CLUSTERS | Clustered headlines that group related articles into one narrative. |
search_story_history | Scope: CLUSTERS | Timestamped snapshots of how a story cluster changed. |
search_vector_news | Scope: VECTOR_SEARCH_NEWS | Semantic search over recent articles. |
summarize_news | Scope: SEARCH_SUMMARY | AI summary of matching articles, with citations. |
search_journalists | Scope: JOURNALISTS | Journalist and reporter profiles. |
search_sources | Scope: SOURCES | News publications and outlets. |
search_people | Scope: PEOPLE | Public-figure profiles. |
search_companies | Scope: COMPANIES | Company profiles (domain, ticker, industry). |
search_topics | Scope: TOPICS | Perigon topic taxonomy for exact topic filters. |
search_wikipedia | Scope: WIKIPEDIA | Keyword search of Wikipedia pages. |
search_vector_wikipedia | Scope: VECTOR_SEARCH_WIKIPEDIA | Semantic search of Wikipedia pages. |
Shortcuts
Each tool looks up an entity, then searches recent articles about it.
| Tool | Availability | Description |
|---|---|---|
get_company_news | Scope: COMPANIES | Recent articles about a company looked up by name. |
get_person_news | Scope: PEOPLE | Recent articles about a person looked up by name. |
get_location_news | Scope: LOCATIONS | Recent articles for a city, state, or country. |
Stats
Always on for any valid key. Prefer these over counting search results by hand.
| Tool | Availability | Description |
|---|---|---|
get_avg_sentiment | Default | Average sentiment (positive / negative / neutral) bucketed over time. |
get_article_counts | Default | Article publication volume bucketed over time. |
get_top_entities | Default | Most-mentioned topics, people, companies, cities, journalists, or sources. |
get_top_people | Default | People whose coverage is spiking versus a baseline. |
get_top_companies | Default | Companies whose coverage is spiking versus a baseline. |
Access
| Tool | Availability | Description |
|---|---|---|
get_api_access | Default | This key's scopes, organization, quota, and entitlement behavior. Does not count against request quota. Call once per session, or after a 403. |
Monitors
Read tools are default. Write tools are opt-in because the shared monitor schema is large.
| Tool | Availability | Description |
|---|---|---|
list_monitors | Default | List and filter monitors by UUID, name, status, or EVENT / MENTIONS / TOPIC. |
get_monitor | Default | Full monitor configuration. |
get_monitor_events | Default | Structured events from EVENT and MENTIONS monitors. |
get_monitor_newsletters | Default | Scheduled briefings, typically from TOPIC monitors. |
get_monitor_summaries | Default | Rolling AI-generated monitor summary history. |
set_monitor_status | Default | Activate, pause, or archive a monitor. Archiving cannot be reversed through the public API. |
create_monitor | Opt-in | Create a DRAFT or ACTIVE monitor. Defaults to DRAFT. |
update_monitor | Opt-in | Partial update; omitted fields are preserved. |
schedulePolicy hours and days are wall-clock times in timezoneId, matching Delivery settings in the Perigon product. The public API stores those intervals in UTC; this server converts on read and write. A daily 3:00 AM America/Chicago briefing is returned and accepted as hour: 3, not hour: 8. get_monitor also includes a human-readable Schedule: line. Monthly schedules preserve configured daysOfMonth (including day 31). Complex monitors with more than 24 intervals fall back to a lossy weekly conversion on read so returned schedules remain updatable through MCP; writes that would exceed 24 intervals after conversion are rejected instead of approximated.
Platform
All of these are opt-in. get_source_by_id and get_top_topics are also in research. get_story_stats is name-only.
| Tool | Availability | Description |
|---|---|---|
get_source_by_id | Opt-in | One news source by exact ID or domain. |
get_top_topics | Opt-in | Topics whose coverage is spiking versus a baseline. |
get_story_stats | Opt-in; Scope: CLUSTERS | Story-level publication volume or velocity over time. |
watchlists | Opt-in | List, get, or resolve organization watchlists. |
create_watchlist / update_watchlist | Opt-in | Create or partially update a watchlist. |
source_groups | Opt-in | List, get, or resolve custom source-group bundles. |
create_source_group / update_source_group | Opt-in | Create or partially update a source group. |
contact_points | Opt-in | List or get monitor notification channels (email / webhook). |
article_refresh | Opt-in | Check a refresh job or peek cached data for up to 100 article IDs. Read-only. |
Signal Insights
Registered for every session unless ?tools= excludes them.
The monitoring profile includes this set. There is no Signal Insights-only profile; pass the tool names if you want only these.
| Tool | Availability | Description |
|---|---|---|
signal_insights_create_workspace | Default | Create a workspace. Call once at the start of a conversation. |
signal_insights_search_signals | Default | Search signals by name or objective. |
signal_insights_read_signal | Default | Signal metadata (classification, schema or newsletter counts). |
signal_insights_list_newsletters | Default | Newsletter titles and excerpts for a TOPIC signal. |
signal_insights_read_newsletter | Default | Full newsletter content as markdown. |
signal_insights_export_events | Default | Export EVENT / MENTIONS events into your workspace. Returns a preview and file path. |
signal_insights_execute_code | Default | Run Python analysis in your workspace (pandas, numpy, matplotlib). |
signal_insights_preview_chart | Default | Render charts in the interactive chart viewer. |
signal_insights_shell | Default | Run shell commands in your workspace. |
signal_insights_list_files | Default | List files in the workspace. |
signal_insights_read_file | Default | Read a workspace file. |
signal_insights_write_file | Default | Write a workspace file. |
signal_insights_grep | Default | Regex search over file contents. |
signal_insights_str_replace | Default | Find and replace a string in a file. |
Prompts and resources
Hosts that support MCP prompts can invoke these playbooks:
entity_deep_divenarrative_tracecoverage_trendjournalist_beat_profilecompetitive_landscapespike_explainer
On-demand reference resources:
perigon://reference/fields— response field semanticsperigon://reference/chaining— cross-endpoint research playbooksperigon://reference/entitlements— this session's scope-to-behavior mapperigon://reference/charts— Signal Insights chart formatting rules
MCP Apps viewers (registered when any Signal Insights tool is active):
ui://signal-insights/chart-viewerui://signal-insights/export-viewer
Monitors Insights workflow
- Call
signal_insights_create_workspaceonce at the start of a conversation. - Pass the returned workspace ID to every later analysis tool.
- Durable files live under
artifacts/(exports and query results go there automatically). Put user-facing deliverables inartifacts/output/. File and shell tools can write elsewhere in the workspace, but onlyartifacts/is backed by persistent storage. - After a sandbox restart, the workspace ID stays valid. The Jupyter kernel and in-memory Python state reset; files under
artifacts/remain. Other workspace paths may be empty on a fresh sandbox.
Prompting tips
Give the model the current date (or a date tool). Some models otherwise treat their knowledge cutoff as "today" and fetch stale news.
Examples:
- Top 5 political headlines in the United States from today.
- Latest tech news from California this week.
- Find journalists covering renewable energy, then show their recent articles.
- Search for Tesla, then find recent stories about them.
- List my active event monitors and show the latest events from one of them.
- Create a draft monitor for executive departures in semiconductors.
ChatGPT plugin skills
Workflow instructions for OpenAI’s plugin format live under skills/. Each skill is a folder with a SKILL.md file (YAML name + description, then procedure)—see Skills and Build skills.
| Skill | Directory | Trigger |
|---|---|---|
| News research | skills/news-research/ | Headlines, entities, trends, journalists, cited briefings |
| Monitor Insights | skills/monitor-insights/ | Monitors, events, newsletters, Signal Insights analysis |
Point the plugin manifest at "skills": "./skills/". You can import skills from the deployed MCP server via Scan Tools in the submission portal, or ship this directory in the plugin package.
MCP Registry
Registry name: io.github.goperigon/perigon-mcp-server.
server.json is the source of truth. A published version is immutable. Bump version in server.json and republish after any listing change.
Local development
This repo uses Bun. Copy .dev.vars.example to .dev.vars (gitignored) and fill in values.
| Variable | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY | Yes | Must be set for the worker to start; any non-empty value works. A real key is only needed for playground chat (/v1/api/chat). |
PERIGON_API_KEY | Playground | Playground default key when testing with a manual API key. |
PERIGON_API_URL | Optional | Perigon API base URL. Defaults in wrangler.jsonc for local dev. |
PERIGON_APP_URL | Optional | App base URL for the OAuth consent page linked from discovery metadata. |
MCP_PUBLIC_URL | Optional | Public MCP origin used in OAuth metadata (defaults to local dev URL). |
The dev server binds to local-mcp.perigon.io (see vite.config.ts). Add this line to /etc/hosts so that hostname resolves on your machine:
127.0.0.1 local-mcp.perigon.io
bun i
bun dev
bun test
bun dev serves the MCP worker and the playground at https://local-mcp.perigon.io:5173.
Contributing and maintainers
Open a GitHub issue or pull request for bugs, missing tools, or use cases. Someone at Perigon will review it.
Report security issues privately. See SECURITY.md. Do not open a public issue.
Maintained by the Perigon team.
License
Questions fréquentes
Qu'est-ce que Perigon ?
Official Perigon news API: articles, stories, companies, journalists, monitors, and stats.
Comment installer Perigon ?
Il fonctionne comme serveur distant. Dans Claude Code : claude mcp add --transport http perigon 'https://mcp.perigon.io/v1/mcp' --header 'Authorization: <Perigon API key, sent as a Bearer token>'. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour Perigon ?
Oui. Il attend Authorization, à renseigner dans sa configuration.
Perigon est-il open source ?
Oui. Son code est sur GitHub sous licence Apache-2.0.
Qui maintient Perigon ?
Il est publié par goperigon. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.