afpnews-mcp-server
MCP server exposing AFP news content as tools for AI assistants, enabling article search, retrieval, and analysis via natural language.
README
afpnews-mcp
MCP (Model Context Protocol) server that exposes AFP news content as tools for AI assistants. Works with any MCP-compatible client.
The package can also be used as a library without MCP server glue via afpnews-mcp-server/definitions.
Prerequisites
- Bun 1.3+
- An AFP API account (API key + username/password)
Setup
git clone https://github.com/julesbonnard/afpnews-mcp-server.git
cd afpnews-mcp-server
bun install
Create a .env file:
APICORE_API_KEY=your-api-key
APICORE_USERNAME=your-username
APICORE_PASSWORD=your-password
Usage
Stdio transport (default)
For local MCP clients like Claude Code or Claude Desktop:
{
"mcpServers": {
"afpnews": {
"command": "bun",
"args": ["src/index.ts"],
"cwd": "/absolute/path/to/afpnews-mcp-server",
"env": {
"APICORE_API_KEY": "your-api-key",
"APICORE_USERNAME": "your-username",
"APICORE_PASSWORD": "your-password"
}
}
}
}
HTTP transport
For remote or multi-user deployments. Users authenticate via OAuth2 PKCE using their AFP credentials.
Required environment variables for HTTP mode:
APICORE_API_KEY=your-api-key
APICORE_BASE_URL=https://api.afp.com
MCP_SERVER_URL=https://news-mcp.example.com
JWT_SECRET=a-random-string-of-at-least-32-characters
MCP_TRANSPORT=http
PORT=3000
Optional:
MCP_SESSION_TTL— session duration in milliseconds (default: 3600000 = 1h)MCP_ALLOWED_REDIRECT_URIS— comma-separated list of allowed OAuth redirect URIs
bun src/index.ts
If you expose the server remotely, use HTTPS.
Docker
docker build -t afpnews-mcp .
docker run \
-e APICORE_API_KEY=your-api-key \
-e APICORE_BASE_URL=https://api.afp.com \
-e MCP_SERVER_URL=https://news-mcp.example.com \
-e JWT_SECRET=your-secret-32-chars-minimum \
-e MCP_TRANSPORT=http \
-p 3000:3000 \
afpnews-mcp
As a library (without MCP server dependency)
You can import pure definitions (tools, prompts, resources) and wire them into your own runtime:
import { AFP_DEFINITIONS } from 'afpnews-mcp-server/definitions';
const { tools, prompts, resources } = AFP_DEFINITIONS;
Or import each collection directly:
import {
TOOL_DEFINITIONS,
PROMPT_DEFINITIONS,
RESOURCE_DEFINITIONS,
} from 'afpnews-mcp-server/definitions';
Each definition is framework-agnostic:
tools:name,title,description,inputSchema,handler(apicore, args)prompts:name,title,description,argsSchema,handler(args)resources:name,uri,description,mimeType,handler()
Tools
| Tool | Description |
|---|---|
afp_search_articles |
Search AFP articles with filters, presets, and full-text mode |
afp_get_article |
Get a full article by its UNO identifier |
afp_find_similar |
Find similar articles (More Like This) from a UNO |
afp_list_facets |
List facet values (topics, genres, countries) with frequency counts |
afp_search_media |
Search AFP media documents (photos, videos, graphics) |
afp_get_media |
Get a full media document by UNO, with optional base64 image embed |
Search presets
The afp_search_articles tool supports presets that apply predefined filters:
a-la-une— Top story (French, last 24h)agenda— Upcoming eventsprevisions— Editorial planning / forecastsmajor-stories— Major articles
List preset
trending-topics— Trending topics from the last 24h
Full text
By default, afp_search_articles returns excerpts (first 2 paragraphs). Set fullText: true to get the complete article body. Presets default to full text.
Pagination
Use offset to paginate through results (e.g. offset: 10 to skip the first 10). For large chronological scans, prefer narrowing dateFrom/dateTo ranges in facets over high offsets. Keep size small (10–20) for best performance.
Prompts
| Prompt | Description |
|---|---|
daily-briefing |
Generate a daily news briefing |
comprehensive-analysis |
In-depth analysis on a topic |
factcheck |
Verify facts using AFP factchecks |
country-news |
News summary for a specific country |
Resources
| Resource | Description |
|---|---|
afp://topics |
AFP Stories topic catalog by language |
Development
bun install
bun test
Internal Architecture
src/tools/*.ts,src/prompts/*.ts,src/resources/*.tscontain pure definitions.src/tools/index.ts,src/prompts/index.ts,src/resources/index.tscontain MCP registration glue.src/definitions.tsexports aggregated, server-agnostic definitions:AFP_DEFINITIONSTOOL_DEFINITIONSPROMPT_DEFINITIONSRESOURCE_DEFINITIONS
License
ISC
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.