{"id":26937659,"url":"https://github.com/VectorInstitute/mcp-goodnews","last_synced_at":"2025-04-02T13:15:47.948Z","repository":{"id":283142084,"uuid":"950810099","full_name":"VectorInstitute/mcp-goodnews","owner":"VectorInstitute","description":"A simple Model Context Protocol application that features a server for getting good, positive, and uplifting news.","archived":false,"fork":false,"pushed_at":"2025-03-18T18:52:57.000Z","size":60,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-18T19:45:45.315Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VectorInstitute.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-18T18:06:25.000Z","updated_at":"2025-03-18T18:53:01.000Z","dependencies_parsed_at":"2025-03-18T19:45:52.875Z","dependency_job_id":"556d5c5d-8dd6-4832-8255-b331af05ded3","html_url":"https://github.com/VectorInstitute/mcp-goodnews","commit_stats":null,"previous_names":["vectorinstitute/mcp-goodnews"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VectorInstitute%2Fmcp-goodnews","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VectorInstitute%2Fmcp-goodnews/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VectorInstitute%2Fmcp-goodnews/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VectorInstitute%2Fmcp-goodnews/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VectorInstitute","download_url":"https://codeload.github.com/VectorInstitute/mcp-goodnews/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246819781,"owners_count":20839095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-02T13:15:26.543Z","updated_at":"2025-04-02T13:15:47.942Z","avatar_url":"https://github.com/VectorInstitute.png","language":"Python","funding_links":[],"categories":["Community Servers","🤖 AI/ML","News and Media","API Integration MCP Servers","🗂️ Extensions by Category","Table of Contents"],"sub_categories":["🌐 Web Services","Other Tools and Integrations"],"readme":"\u003c!-- markdownlint-disable-file MD033 --\u003e\r\n\r\n# MCP Goodnews\r\n\r\n---\r\n\r\n[![CodeQL](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/github-code-scanning/codeql)\r\n[![Linting](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/lint.yml/badge.svg)](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/lint.yml)\r\n[![Unit Testing and Upload Coverage](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/unit_test.yml/badge.svg)](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/unit_test.yml)\r\n[![codecov](https://codecov.io/github/VectorInstitute/mcp-goodnews/graph/badge.svg?token=KvwFM5bQiH)](https://codecov.io/github/VectorInstitute/mcp-goodnews)\r\n[![Release](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/release.yml/badge.svg)](https://github.com/VectorInstitute/mcp-goodnews/actions/workflows/release.yml)\r\n![GitHub License](https://img.shields.io/github/license/VectorInstitute/mcp-goodnews)\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cimg src=\"https://d3ddy8balm3goa.cloudfront.net/vector-mcp-goodnews/logo.svg\" alt=\"MCP Goodnews Logo\" width=\"400\"/\u003e\r\n\u003c/p\u003e\r\n\r\nMCP Goodnews is a simple Model Context Protocol (MCP) application that features\r\na server for getting good, positive, and uplifting news. This tool fetches news\r\narticles from the [NewsAPI](https://newsapi.org/) and uses a Cohere LLM to rank\r\nand return the top news articles based on positive sentiment.\r\n\r\nRead the [blog post](https://medium.com/data-science-collective/goodnews-mcp-good-news-at-your-fingertips-d6cda34d558d) on Medium!\r\n\r\n## Motivation\r\n\r\nIn a world where negative news often dominates headlines, Goodnews MCP aims to\r\nshine a light on more positive and uplifting news stories. This project was\r\ninspired by an earlier initiative called GoodnewsFirst, which delivered positive\r\nnews daily to email subscribers — it was a really awesome project! While GoodnewsFirst\r\npredated recent breakthroughs in Large Language Models (LLMs) and relied on\r\ntraditional methods for sentiment ranking, Goodnews MCP leverages modern LLMs to\r\nperform sentiment analysis in a zero-shot setting.\r\n\r\n## Example Usage: MCP Goodnews with Claude Desktop\r\n\r\n\u003cimg width=\"1112\" alt=\"image\" src=\"https://github.com/user-attachments/assets/fe204338-7505-4ce5-91b8-0b0b611099e1\" /\u003e\r\n\r\n### Requirements\r\n\r\n- [Cohere API Key](https://dashboard.cohere.com/)\r\n- [NewsAPI Key](https://newsapi.org/)\r\n- [Claude Desktop Application](https://claude.ai/download)\r\n- [uv Python Project and Package Manager](https://docs.astral.sh/uv/getting-started/installation/)\r\n\r\n### Clone `mcp-goodnews`\r\n\r\n```bash\r\n# Clone the repository\r\ngit clone https://github.com/VectorInstitute/mcp-goodnews.git\r\n```\r\n\r\nIn the next step, we'll need to provide the absolute path to the location of this\r\ncloned repository.\r\n\r\n### Update Claude Desktop Config to find mcp-goodnews\r\n\r\n#### For Mac/Linux\r\n\r\n```bash\r\n# Navigate to the configuration directory\r\ncd ~/Library/Application\\ Support/Claude/config\r\n\r\n# Edit the claude_desktop_config.json file\r\nnano claude_desktop_config.json\r\n```\r\n\r\n#### For Windows\r\n\r\n```bash\r\n# Navigate to the configuration directory\r\ncd %APPDATA%\\Claude\\config\r\n\r\n# Edit the claude_desktop_config.json file\r\nnotepad claude_desktop_config.json\r\n```\r\n\r\nAnd you'll want to add an entry under `mcpServers` for `Goodnews`:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"Goodnews\": {\r\n      \"command\": \"\u003cabsolute-path-to-bin\u003e/uv\",\r\n      \"args\": [\r\n        \"--directory\",\r\n        \"\u003cabsolute-path-to-cloned-repo\u003e/mcp-goodnews/src/mcp_goodnews\",\r\n        \"run\",\r\n        \"server.py\"\r\n      ],\r\n      \"env\": {\r\n        \"NEWS_API_KEY\": \"\u003cnewsapi-api-key\u003e\",\r\n        \"COHERE_API_KEY\": \"\u003ccohere-api-key\u003e\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Start or Restart Claude Desktop\r\n\r\nClaude Desktop will use the updated config to build and run the mcp-goodnews server.\r\nIf successful, you will see the hammer tool in the bottom-right corner of the chat\r\ndialogue window.\r\n\r\n\u003cimg width=\"749\" alt=\"image\" src=\"https://github.com/user-attachments/assets/f871451b-cd66-4a75-bdde-35220e485203\" /\u003e\r\n\r\nClicking the hammer tool icon will bring up a modal that lists available MCP tools.\r\nYou should see `fetch_list_of_goodnews` listed there.\r\n\r\n\u003cimg width=\"505\" alt=\"image\" src=\"https://github.com/user-attachments/assets/d68bef03-0926-4ae9-8b4a-00a003097169\" /\u003e\r\n\r\n### Ask Claude for Good News\r\n\r\nExample prompts:\r\n\r\n- \"Show me some good news from today.\"\r\n- \"What positive things happened in the world this week?\"\r\n- \"Give me uplifting news stories about science.\"\r\n\r\n## How It Works\r\n\r\n1. When you request good news, the application queries the NewsAPI for recent articles\r\n2. The Cohere LLM analyzes the sentiment of each article\r\n3. Articles are ranked based on positive sentiment score\r\n4. The top-ranking good news stories are returned to you through Claude\r\n\r\n## License\r\n\r\n[Apache 2.0](./LICENSE)\r\n\r\n---\r\n\r\n_Stay positive with Goodnews MCP!_\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FVectorInstitute%2Fmcp-goodnews","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FVectorInstitute%2Fmcp-goodnews","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FVectorInstitute%2Fmcp-goodnews/lists"}