Perigon MCP Server

Serveur MCP officiel pour l'API Perigon, offrant un accès aux données médiatiques et d'actualités en temps réel.

Documentation

Perigon logo

Perigon MCP

Perigon's hosted MCP server for real-time news, entities, and monitors.

Deploy status License: Apache-2.0 MCP Registry version Listed on Smithery Transport: Streamable HTTP Documentation Try it in the playground


Quick start

Endpoint: https://mcp.perigon.io/v1/mcp

Auth: Authorization: Bearer <key> — create a key at perigon.io/dev/keys.

Try it in the playground (requires a signed-in Perigon dashboard session). Client-specific setup: dev.perigon.io/docs/mcp.

Native Streamable HTTP (recommended):

{
  "mcpServers": {
    "perigon": {
      "url": "https://mcp.perigon.io/v1/mcp",
      "type": "http",
      "headers": {
        "Authorization": "Bearer YOUR_PERIGON_API_KEY"
      }
    }
  }
}

mcp-remote (clients without native HTTP):

{
  "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.


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
  • Comma-separated tool names, profile aliases, or a mix.
  • The filter intersects with what the key's scopes already allow. It cannot expand access.
  • Omit the parameter, pass an empty value, or pass all → default set (opt-in tools stay off).
  • Unknown names are dropped. If every name is unknown, the default set is used.
ProfileTools
researchsearch_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.
monitoringAll monitor tools (including create_monitor / update_monitor) plus every Signal Insights tool.
platformwatchlists, create_watchlist, update_watchlist, source_groups, create_source_group, update_source_group, contact_points, article_refresh, get_api_access.
minimalsearch_news_articles, the five stats tools, get_api_access.

get_story_stats is not in any profile. Request it by name. It still requires CLUSTERS at call time; a key without that scope can select the tool and then get a permission error.

Other opt-in tools need no extra scope. Any valid key can request them.


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 or profile. Registration is not the same as API access.

Search

ToolAvailabilityDescription
search_news_articlesDefaultKeyword and filter search over individual articles, including Boolean queries.
search_news_storiesScope: CLUSTERSClustered headlines that group related articles into one narrative.
search_story_historyScope: CLUSTERSTimestamped snapshots of how a story cluster changed.
search_vector_newsScope: VECTOR_SEARCH_NEWSSemantic search over recent articles.
summarize_newsScope: SEARCH_SUMMARYAI summary of matching articles, with citations.
search_journalistsScope: JOURNALISTSJournalist and reporter profiles.
search_sourcesScope: SOURCESNews publications and outlets.
search_peopleScope: PEOPLEPublic-figure profiles.
search_companiesScope: COMPANIESCompany profiles (domain, ticker, industry).
search_topicsScope: TOPICSPerigon topic taxonomy for exact topic filters.
search_wikipediaScope: WIKIPEDIAKeyword search of Wikipedia pages.
search_vector_wikipediaScope: VECTOR_SEARCH_WIKIPEDIASemantic search of Wikipedia pages.

Shortcuts

Each tool looks up an entity, then searches recent articles about it.

ToolAvailabilityDescription
get_company_newsScope: COMPANIESRecent articles about a company looked up by name.
get_person_newsScope: PEOPLERecent articles about a person looked up by name.
get_location_newsScope: LOCATIONSRecent articles for a city, state, or country.

Stats

Always on for any valid key. Prefer these over counting search results by hand.

ToolAvailabilityDescription
get_avg_sentimentDefaultAverage sentiment (positive / negative / neutral) bucketed over time.
get_article_countsDefaultArticle publication volume bucketed over time.
get_top_entitiesDefaultMost-mentioned topics, people, companies, cities, journalists, or sources.
get_top_peopleDefaultPeople whose coverage is spiking versus a baseline.
get_top_companiesDefaultCompanies whose coverage is spiking versus a baseline.

Access

ToolAvailabilityDescription
get_api_accessDefaultThis 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.

ToolAvailabilityDescription
list_monitorsDefaultList and filter monitors by UUID, name, status, or EVENT / MENTIONS / TOPIC.
get_monitorDefaultFull monitor configuration.
get_monitor_eventsDefaultStructured events from EVENT and MENTIONS monitors.
get_monitor_newslettersDefaultScheduled briefings, typically from TOPIC monitors.
get_monitor_summariesDefaultRolling AI-generated monitor summary history.
set_monitor_statusDefaultActivate, pause, or archive a monitor. Archiving cannot be reversed through the public API.
create_monitorOpt-inCreate a DRAFT or ACTIVE monitor. Defaults to DRAFT.
update_monitorOpt-inPartial update; omitted fields are preserved.

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.

ToolAvailabilityDescription
get_source_by_idOpt-inOne news source by exact ID or domain.
get_top_topicsOpt-inTopics whose coverage is spiking versus a baseline.
get_story_statsOpt-in; Scope: CLUSTERSStory-level publication volume or velocity over time.
watchlistsOpt-inList, get, or resolve organization watchlists.
create_watchlist / update_watchlistOpt-inCreate or partially update a watchlist.
source_groupsOpt-inList, get, or resolve custom source-group bundles.
create_source_group / update_source_groupOpt-inCreate or partially update a source group.
contact_pointsOpt-inList or get monitor notification channels (email / webhook).
article_refreshOpt-inCheck 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 Insights API and Pokey backend reject calls when the key lacks Signal Insights access.

The monitoring profile includes this set. There is no Signal Insights-only profile; pass the tool names if you want only these.

ToolAvailabilityDescription
signal_insights_create_workspaceDefaultCreate a workspace. Call once at the start of a conversation.
signal_insights_search_signalsDefaultSearch signals by name or objective.
signal_insights_read_signalDefaultSignal metadata (classification, schema or newsletter counts).
signal_insights_list_newslettersDefaultNewsletter titles and excerpts for a TOPIC signal.
signal_insights_read_newsletterDefaultFull newsletter content as markdown.
signal_insights_export_eventsDefaultExport EVENT / MENTIONS events to S3. Returns a preview and file path.
signal_insights_execute_codeDefaultPython in a persistent IPython kernel (pandas, numpy, matplotlib).
signal_insights_preview_chartDefaultRender charts in the interactive chart viewer.
signal_insights_shellDefaultBash in the sandbox.
signal_insights_list_filesDefaultList files in the workspace.
signal_insights_read_fileDefaultRead a workspace file.
signal_insights_write_fileDefaultWrite a workspace file.
signal_insights_grepDefaultRegex search over file contents.
signal_insights_str_replaceDefaultFind and replace a string in a file.

Prompts and resources

Hosts that support MCP prompts can invoke these playbooks:

  • entity_deep_dive
  • narrative_trace
  • coverage_trend
  • journalist_beat_profile
  • competitive_landscape
  • spike_explainer

On-demand reference resources:

  • perigon://reference/fields — response field semantics
  • perigon://reference/chaining — cross-endpoint research playbooks
  • perigon://reference/entitlements — this session's scope-to-behavior map
  • perigon://reference/charts — Signal Insights chart formatting rules

MCP Apps viewers (registered when any Signal Insights tool is active):

  • ui://signal-insights/chart-viewer
  • ui://signal-insights/export-viewer

Signal Insights workflow

  1. Call signal_insights_create_workspace once at the start of a conversation.
  2. Pass the returned workspace ID to every later analysis tool.
  3. Files from signal_insights_execute_code and signal_insights_shell persist in that workspace. Exports land at /home/user/workspace/artifacts/ inside the sandbox.
  4. After a restart, the prior workspace UUID is still valid. The kernel is fresh; exported S3 artifacts remain.

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.

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. Put secrets in .dev.vars.

VariableRequiredDescription
ANTHROPIC_API_KEYYesRequired for every route, including /v1/mcp. Also used by the playground chat.
PERIGON_API_KEYPlaygroundPlayground default key.
POKEY_SIGNAL_INSIGHTS_BASE_URLNoPokey base URL for Signal Insights. Defaults to https://api.perigon.io/pokey in Wrangler. Use http://localhost:3001 to hit a local Pokey.

To use Perigon dashboard cookies with the playground, add this to /etc/hosts:

127.0.0.1 local-mcp.perigon.io
bun i
bun dev
bun test

bun dev serves the MCP worker and the playground.


Contributing and maintainers

Open a GitHub issue or pull request for bugs, missing tools, or use cases. Someone at Perigon will review it.

Maintained by the Perigon team:

  • Lead developer: Vasyl Teliman (feature development, security, server)
  • Lead designer: Galen Rutledge (feature development, continued maintenance)
  • Initial development: Islem Maboud (transport, auth, deploy, playground)

License

Apache-2.0