GO

Goodnews MCP Server: Curated Uplifting News

Discover uplifting, curated positive news on our MCP server and brighten your day with handpicked stories that inspire hope and goodwill.

Quick Install
npx -y @VectorInstitute/mcp-goodnews

Overview

Goodnews MCP Server is a lightweight Model Context Protocol (MCP) server that provides curated, uplifting news stories as programmatic tools. It exposes endpoints that conform to MCP-style tool discovery and invocation patterns so chat agents and applications can fetch positive human-interest stories, summaries, and metadata in a structured way.

This server is intended for developers who want to integrate a reliable feed of handpicked, goodwill-focused news into conversational AI agents, daily briefings, or content pipelines. By treating curated stories as tools, models can request short summaries or full articles with consistent JSON responses, improving predictability and reducing hallucination when referencing external news content.

Features

  • MCP-compliant tool discovery and invocation endpoints
  • Curated collection of uplifting news stories with metadata (title, date, location, tags)
  • Multiple content views: summary, article, and metadata
  • Configurable sources and curation metadata via environment variables or config file
  • Docker support for simple deployment
  • Health and readiness endpoints for orchestration systems
  • Example client usage snippets (curl, Python)

Installation / Configuration

Prerequisites: Git, Node.js (>=16) or Docker

Clone the repository:

git clone https://github.com/VectorInstitute/mcp-goodnews.git
cd mcp-goodnews

Install dependencies and start locally (Node/npm):

npm install
# development
npm run dev
# production
npm run start

Default server options are read from environment variables. Example .env:

PORT=3000
NEWS_DATA_PATH=./data/news.json
LOG_LEVEL=info
CORS_ORIGINS=*

Start with Docker:

# build image
docker build -t mcp-goodnews:latest .
# run container
docker run -p 3000:3000 -e PORT=3000 mcp-goodnews:latest

Configuration file (JSON) example:

{
  "port": 3000,
  "dataPath": "./data/news.json",
  "maxSummaryLength": 300
}

Place curated stories in the configured data path as an array of objects with fields such as id, title, date, summary, article, tags, and source.

Available Resources

The server exposes several HTTP endpoints useful to developers and agents:

PathMethodDescription
/mcp/manifestGETReturns an MCP manifest describing available tools and schemas
/tools/goodnewsPOSTInvoke the Goodnews tool to fetch story summaries or full articles
/newsGETList available curated stories (filter by tag, date, location)
/news/:idGETRetrieve a single story by ID (metadata, summary, article)
/healthGETLiveness / readiness probe

Example manifest (abridged):

{
  "name": "goodnews",
  "version": "1.0.0",
  "tools": [
    {
      "id": "goodnews.fetch",
      "name": "FetchUpliftingNews",
      "description": "Return curated uplifting news stories or summaries by id, tag, or random.",
      "input_schema": {
        "type": "object",
        "properties": {
          "id": {"type": "string"},
          "mode": {"type": "string", "enum": ["summary","article"], "default": "summary"},
          "tag": {"type": "string"}
        }
      }
    }
  ]
}

Example tool invocation (HTTP):

POST /tools/goodnews HTTP/1.1
Content-Type: application/json

{
  "id": "story-123",
  "mode": "summary"
}

Response:

{
  "id": "story-123",
  "title": "Local Library Opens Multilingual Storytime",
  "summary": "A neighborhood library launched a weekly multilingual storytime, bringing families together and improving literacy.",
  "tags": ["community", "education"],
  "source": "Sample Gazette",
  "retrieved_at": "2026-04-01T12:00:00Z"
}

Use Cases

  • Conversational agents: Integrate the MCP manifest so an LLM can discover and call the goodnews tool to insert factual, positive news snippets into responses (e.g., “Share a short uplifting story for a daily inspiration prompt”).
  • Daily briefing pipelines: Fetch one curated summary per day to include in newsletters or morning digest emails via a scheduled job.
  • Slack or chatbots: On user request (“Tell me something good”), invoke the tool to return a short summary and link to the full article.
  • Mental health and well-being apps: Provide gentle, uplifting content as part of non-clinical wellbeing features, using structured metadata (tags, location) to pick relevant stories.
  • Testing and grounding LLM outputs: Use controlled, curated content from the server to reduce hallucinations when models reference real-world events.

Developer Tips

  • Validate tool schemas when adding new fields to ensure downstream agents can parse responses.
  • Use the /health endpoint in orchestration (Kubernetes) for readiness/liveness probes.
  • Keep the curated dataset small and well-annotated to maintain consistency and ease moderation.
  • The manifest endpoint is designed for automatic discovery; make sure its URLs are reachable from any agent that will call the tool.

Repository and source code: https://github.com/VectorInstitute/mcp-goodnews