- Wpnews
{
"$schema": "https://modelcontextprotocol.io/schema/server-card/draft.json",
"name": "wpnews",
"version": "2.1.0",
"protocolVersion": "2025-06-18",
"description": "AI/tech news index built for AI agents. Search, topic/entity browsing, full article fetch, trending detection, and prompt templates.",
"homepage": "https://wpnews.pro",
"license": "MIT",
"serverInfo": {
"name": "wpnews",
"version": "2.1.0",
"description": "AI/tech news index built for AI agents.",
"publisher": "wpnews.pro",
"license": "MIT",
"homepage": "https://wpnews.pro"
},
"transport": {
"type": "streamable-http",
"endpoint": "https://wpnews.pro/mcp",
"alternates": [
{
"type": "http+sse",
"endpoint": "https://api.wpnews.pro/mcp/sse"
},
{
"type": "stdio",
"command": "npx",
"args": [
"-y",
"wpnews-mcp@latest"
]
}
]
},
"capabilities": {
"tools": true,
"resources": true,
"prompts": true,
"logging": false
},
"tools": [
{
"name": "search",
"description": "Keyword / full-text search for articles whose CONTENT matches a query word or phrase. This is the default tool for finding articles by what they are about \u2014 use it whenever the user names a topic, product, event, model, or phrase to look up ('latest on Claude', 'GPT-5 news', 'articles about RAG'). Returns matching articles (title, summary, slug, URL, published_at). NOT for corpus size or health \u2014 that's stats. Pass exclude_seen: true (with a Mcp-Session-Id header) to suppress slugs already returned this session \u2014 avoids showing the same article twice in a conversation.",
"inputSchema": {
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search query (free-form)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10
},
"exclude_seen": {
"type": "boolean",
"description": "Suppress slugs already shown in this session",
"default": false
}
},
"required": [
"q"
]
}
},
{
"name": "latest",
"description": "The N newest articles ordered purely by publish time (reverse chronological). Use for 'what's new', 'latest news', 'today's AI updates'. Ranks by RECENCY, not popularity \u2014 for what is hot or gaining momentum use trending instead. Pass exclude_seen: true (with Mcp-Session-Id header) to paginate forward without re-seeing earlier results.",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10
},
"hours": {
"type": "integer",
"minimum": 1,
"maximum": 168,
"description": "Optional: restrict to last N hours"
},
"exclude_seen": {
"type": "boolean",
"description": "Suppress slugs already shown in this session",
"default": false
}
}
}
},
{
"name": "topic",
"description": "List ARTICLES filed under ONE specific topic slug (kebab-case, e.g. 'large-language-models', 'ai-safety'). Requires a known slug \u2014 to discover which slugs exist, call list_topics first. Returns articles, not the list of topics.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Topic slug"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
}
},
"required": [
"slug"
]
}
},
{
"name": "entity",
"description": "List articles mentioning a specific named entity \u2014 company, product, person, or AI model. Entity names are case-sensitive as extracted from articles (e.g. 'OpenAI', 'Claude', 'GPT-5').",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Entity name"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
}
},
"required": [
"name"
]
}
},
{
"name": "article",
"description": "Fetch a single article by slug. Returns full body in Markdown plus metadata. Use after search or latest to get full text.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Article slug"
}
},
"required": [
"slug"
]
}
},
{
"name": "list_topics",
"description": "Browse the directory of topics: list ALL available topic slugs with their article counts. Returns the taxonomy itself (the set of valid slugs to choose from), NOT articles. Call this to discover or browse which slugs exist, then pass one to topic to get that topic's articles.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "trending",
"description": "Topics and entities gaining MOMENTUM right now \u2014 what is hot or rising, ranked by velocity/acceleration of coverage, NOT by plain recency (for the newest articles use latest). Returns trending topics/entities, not article bodies. Use for 'what's hot', 'rising trends'.",
"inputSchema": {
"type": "object",
"properties": {
"days": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"default": 7
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10
}
}
}
},
{
"name": "stats",
"description": "Service health and corpus-SIZE metrics only: total article count, source count, last-update time, server version. A status/sanity check \u2014 it does NOT search or return any articles (to find articles use search or latest).",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "bulk_articles",
"description": "Fetch multiple articles by slug in one call. Use after search or latest to load several full bodies at once \u2014 saves round trips vs calling article repeatedly. Max 20 slugs per call.",
"inputSchema": {
"type": "object",
"properties": {
"slugs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Array of article slugs"
}
},
"required": [
"slugs"
]
}
},
{
"name": "find_related",
"description": "Given an article slug, return semantically related articles from the same topic cluster. Useful for following a thread across our coverage.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 5
}
},
"required": [
"slug"
]
}
},
{
"name": "since",
"description": "List articles published after a given ISO date (e.g. '2026-05-22'). Useful for incremental polling \u2014 pull only what's new since the agent's last sync timestamp.",
"inputSchema": {
"type": "object",
"properties": {
"iso_date": {
"type": "string",
"description": "ISO date or datetime (YYYY-MM-DD or full timestamp)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 30
}
},
"required": [
"iso_date"
]
}
},
{
"name": "session_memory",
"description": "Inspect or reset the current session's autobiographical state \u2014 list of article slugs already returned to this client in this session, plus recent queries. Set action: \"reset\" to clear. Requires Mcp-Session-Id header to be passed on every request.",
"inputSchema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"inspect",
"reset"
],
"default": "inspect"
}
}
}
}
],
"resources": [
{
"uri": "wpnews://feed/latest",
"name": "Latest articles feed",
"description": "Most recent 20 articles as a markdown digest.",
"mimeType": "text/markdown"
},
{
"uri": "wpnews://corpus/llms-full",
"name": "Full corpus (LLM-ready)",
"description": "100 most recent articles concatenated as one markdown document.",
"mimeType": "text/markdown"
},
{
"uri": "wpnews://corpus/index",
"name": "Article index (JSON)",
"description": "Metadata for all articles \u2014 slug, title, summary, URLs.",
"mimeType": "application/json"
},
{
"uri": "wpnews://self-improvement/digest",
"name": "Self-improvement digest",
"description": "Latest weekly self-mining digest \u2014 corpus articles describing techniques that could upgrade wpnews.pro, grouped by subsystem.",
"mimeType": "text/markdown"
},
{
"uri": "wpnews://taxonomy",
"name": "Classification taxonomy",
"description": "Machine-readable topic allowlist + agent-relevance lens so agents align queries/filters with how this corpus is classified.",
"mimeType": "application/json"
},
{
"uri": "wpnews://self-improvement/bot-audience",
"name": "Bot audience analytics",
"description": "Latest machine-audience report \u2014 which AI crawlers consume us (training vs answer-engine vs search), daily trend, and error rate served. The agent-first ICP, quantified.",
"mimeType": "text/markdown"
},
{
"uri": "wpnews://self-improvement/coverage",
"name": "Coverage gap report",
"description": "Latest daily coverage analysis \u2014 thin/outage days where news was lost, plus top cross-source stories ranked by dev-impact (agent-relevance), filtering out society/celebrity noise.",
"mimeType": "text/markdown"
},
{
"uri": "wpnews://self-improvement/agent-queue",
"name": "Agent-relevance review queue",
"description": "Latest daily agent-research queue \u2014 articles scored most relevant to building/operating AI agents, with optional LLM takeaways to review and promote into memory or code.",
"mimeType": "text/markdown"
}
],
"prompts": [
{
"name": "summarize_today",
"description": "Build a brief summary of today's top AI/tech stories.",
"arguments": []
},
{
"name": "find_emerging_trends",
"description": "Identify topics/entities with rising mention velocity in the past week. Useful for trendspotting.",
"arguments": [
{
"name": "days",
"description": "Lookback window (1-14)",
"required": false
}
]
},
{
"name": "compare_entities",
"description": "Compare two entities by mention volume, co-occurring topics, and recent activity.",
"arguments": [
{
"name": "a",
"description": "First entity name",
"required": true
},
{
"name": "b",
"description": "Second entity name",
"required": true
}
]
}
],
"authentication": {
"type": "apiKey",
"header": "X-API-Key",
"freeTierUrl": "https://wpnews.pro/api"
},
"documentation": "https://wpnews.pro/integrations"
}
Recommend Servers
View AllWrite notes to Flomo