{"id":30117393,"url":"https://github.com/longcipher/rsshub-mcp","last_synced_at":"2025-08-10T10:42:25.387Z","repository":{"id":308825892,"uuid":"969957487","full_name":"longcipher/rsshub-mcp","owner":"longcipher","description":"A mcp server for rsshub","archived":false,"fork":false,"pushed_at":"2025-08-08T04:29:02.000Z","size":1421,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-08T06:24:38.946Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/longcipher.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,"zenodo":null}},"created_at":"2025-04-21T08:04:51.000Z","updated_at":"2025-08-08T04:29:05.000Z","dependencies_parsed_at":"2025-08-08T06:35:11.853Z","dependency_job_id":null,"html_url":"https://github.com/longcipher/rsshub-mcp","commit_stats":null,"previous_names":["longcipher/rsshub-mcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/longcipher/rsshub-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/longcipher%2Frsshub-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/longcipher%2Frsshub-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/longcipher%2Frsshub-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/longcipher%2Frsshub-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/longcipher","download_url":"https://codeload.github.com/longcipher/rsshub-mcp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/longcipher%2Frsshub-mcp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269712986,"owners_count":24463216,"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","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-08-10T10:42:19.512Z","updated_at":"2025-08-10T10:42:24.610Z","avatar_url":"https://github.com/longcipher.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RSSHub MCP\n\nA Model Context Protocol (MCP) server for RSSHub, providing structured access to RSS feeds and content through the MCP protocol.\n\n## Overview\n\nThis project is a complete RSSHub MCP solution implemented in Rust with a multi-crate workspace structure. It provides not only metadata discovery but also **actual RSS content retrieval**, making it a full-featured RSS workflow tool.\n\n### Key Features\n\n- ✅ **Complete RSS Workflow**: Discover feeds → Configure parameters → Retrieve actual RSS content\n- ✅ **Smart Search**: Filter through 250+ namespaces efficiently with keyword search\n- ✅ **Type Safety**: Full compile-time guarantees through Rust's type system\n- ✅ **High Performance**: Async/await with tokio for efficient I/O operations\n- ✅ **Robust Architecture**: Clean separation of concerns across 3 crates\n- ✅ **Comprehensive Testing**: Independent test clients for validation\n\n## Project Structure\n\n```text\nrsshub-mcp/\n├── Cargo.toml          # Workspace configuration\n├── rsshub-api/         # RSSHub API client library\n│   ├── Cargo.toml\n│   └── src/\n│       └── lib.rs      # Core API client implementation\n├── rsshub-mcp/         # MCP server implementation\n│   ├── Cargo.toml\n│   └── src/\n│       ├── main.rs     # Server entry point\n│       ├── service.rs  # MCP service implementation\n│       ├── config.rs   # Configuration management\n│       └── log.rs      # Logging configuration\n└── mcp-client/         # Testing client\n    ├── Cargo.toml\n    └── src/\n        ├── quick_test.rs   # Quick functionality test\n        └── simple_test.rs  # Basic connection test\n```\n\n## Crates Description\n\n### 1. rsshub-api (v0.1.0)\n\n- **Purpose**: Standalone RSSHub API client library\n- **Features**:\n  - Complete implementation of core RSSHub API methods\n  - RSS content retrieval functionality\n  - Error handling using eyre\n  - Async operation support\n  - Can be used as an independent library\n\n### 2. rsshub-mcp (v0.1.0)\n\n- **Purpose**: MCP (Model Context Protocol) server\n- **Features**:\n  - Built on ultrafast-mcp framework\n  - Depends on rsshub-api library\n  - Provides 10 MCP tools (including RSS content retrieval)\n  - HTTP transport protocol support\n\n### 3. mcp-client (v0.1.0)\n\n- **Purpose**: Testing and validation tools\n- **Features**:\n  - Quick functionality testing (quick_test)\n  - Basic connection testing (simple_test)\n  - Used for development and debugging\n\n## Core Functionality\n\n### MCP Tools\n\nThe server exposes tools for RSSHub interaction via MCP:\n\n#### Core Discovery Tools\n\n1. `get_all_namespaces` - Get all available namespaces\n2. `get_namespace` - Get routes for a specific namespace\n3. **`search_namespaces`** 🆕 - **Search namespaces by keyword (much more practical than listing all)**\n4. `get_radar_rules` - Get all radar rules for automatic feed detection\n5. `get_radar_rule` - Get a specific radar rule by name\n6. `get_categories` - List known categories (informational; static guidance)\n7. `get_category` - Get feeds for a specific category\n\n8. **`search_routes`** 🆕 - Search routes by keyword across all namespaces or within a namespace (supports text/json output)\n9. **`get_route_detail`** 🆕 - Get detailed information for a specific route within a namespace (supports text/json output)\n10. **`suggest_route_keys`** 🆕 - Fuzzy-suggest closest route keys within a namespace for a partial path\n\n#### Content Retrieval Tool\n\n 1. **`get_feed`** 🆕 - **Fetch actual RSS content from RSSHub paths**\n\n\n### Usage Examples\n\n#### Get RSS Content\n\n```json\n{\n  \"tool\": \"get_feed\",\n  \"arguments\": {\n  \"path\": \"bilibili/user/video/2267573\",\n  \"format\": \"json\"\n  }\n}\n```\n\n#### Search Namespaces\n\n```json\n{\n  \"tool\": \"search_namespaces\", \n  \"arguments\": {\n    \"query\": \"bili\"\n  }\n}\n```\n\n#### List Tools (MCP protocol)\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"tools/list\",\n  \"id\": \"list-1\"\n}\n```\n\n#### Search Routes\n\n```json\n{\n  \"tool\": \"search_routes\",\n  \"arguments\": {\n    \"query\": \"live\",\n    \"namespace\": \"bilibili\",\n    \"limit\": 10,\n    \"format\": \"json\"\n  }\n}\n```\n\n#### Get Route Detail\n\n```json\n{\n  \"tool\": \"get_route_detail\",\n  \"arguments\": {\n    \"namespace\": \"bilibili\",\n    \"route_key\": \"/live/room/:roomID\",\n    \"format\": \"text\"\n  }\n}\n```\n\n#### Get Radar Rules (JSON)\n\n```json\n{\n  \"tool\": \"get_radar_rules\",\n  \"arguments\": {\n    \"format\": \"json\"\n  }\n}\n```\n\n#### Get A Radar Rule (text)\n\n```json\n{\n  \"tool\": \"get_radar_rule\",\n  \"arguments\": {\n    \"rule_name\": \"github.com\",\n    \"format\": \"text\"\n  }\n}\n```\n\n#### Get Category (JSON)\n\n```json\n{\n  \"tool\": \"get_category\",\n  \"arguments\": {\n    \"category\": \"programming\",\n    \"format\": \"json\"\n  }\n}\n```\n\n#### Suggest Route Keys\n\n```json\n{\n  \"tool\": \"suggest_route_keys\",\n  \"arguments\": {\n    \"namespace\": \"bilibili\",\n    \"partial\": \"live/ro\",\n    \"limit\": 5\n  }\n}\n```\n\n## Implementation Highlights\n\n### Recent Improvements\n\nBased on analysis of reference projects (`reonokiy/rsshub-mcp` and `RechardLLee/RSSHUB-MCP`), we've implemented the most valuable missing features:\n\n1. **RSS Content Retrieval** - Users can now get actual RSS feed content, not just metadata\n2. **Intelligent Search** - Efficiently filter through hundreds of namespaces\n3. **Enhanced Data Structures** - Proper types for RSS content handling\n4. **Superior Architecture** - Rust's advantages over Python implementations\n\n### Quality Advantages\n\n- **Type Safety**: Full compile-time guarantees through Rust's type system\n- **Performance**: Async/await with tokio for efficient I/O\n- **Memory Safety**: No runtime memory errors possible\n- **Error Handling**: Comprehensive error propagation with proper types\n- **Modularity**: Clean separation of concerns across crates\n\n### Development \u0026 Testing\n\n#### Development Workflow\n\n```bash\n# Format and lint all code\njust lint\n\n# Build all crates\ncargo build --workspace\n\n# Run all tests\njust test\n```\n\n#### Testing the Implementation\n\n```bash\n# Start the MCP server\ncargo run -p rsshub-mcp --bin rsshub-mcp\n\n# Test all 10 tools (including new RSS content retrieval)\ncargo run -p mcp-client --bin quick_test\n\n# Note: start the server from the crate directory so it finds config.toml\n# (cd rsshub-mcp \u0026\u0026 cargo run -p rsshub-mcp --bin rsshub-mcp)\n\n# Basic connection test\ncargo run -p mcp-client --bin simple_test\n```\n\n### Validation Status\n\nNote: See quick_test for an end-to-end exercise of each tool. Build and run locally to validate in your environment.\n\n## Advantages\n\n1. **Complete RSS Workflow**: Unlike reference projects that only provide discovery, this implementation enables full RSS content retrieval\n2. **Superior Architecture**: 3-crate workspace design with better modularity than Python alternatives\n3. **Type Safety**: Rust's type system prevents runtime errors common in dynamic languages\n4. **High Performance**: Async/await with tokio provides better I/O efficiency\n5. **Comprehensive Testing**: Independent test client facilitates debugging and validation\n6. **Code Quality**: Strict linting, formatting, and dependency management\n\n## Future Enhancements\n\n### High Priority\n\n- **Enhanced RSS Parsing**: Parse RSS content into structured data instead of raw text\n- **Caching Mechanism**: Add TTL caching for metadata (namespaces, radar rules)\n- **Content Processing**: HTML cleaning, timezone normalization\n\n### Medium Priority\n\n- **URL Format Support**: Support multiple URL formats (rsshub://, standard URL, short paths)\n- **Retry Logic**: Add simple retry mechanism for failed requests\n- **Better Error Messages**: Provide more user-friendly error responses\n\n### Low Priority\n\n- **Resource Handler**: Waiting for MCP framework support\n- **AI Assistant Features**: Prompt handlers for enhanced functionality\n\n## Project Status\n\nNote: Verified locally during development. Re-run quick_test after changes.\n\n### Dependency Management\n\nUses workspace-level dependency management with shared versions defined in the root `Cargo.toml`:\n\n```toml\n[workspace.dependencies]\nultrafast-mcp = \"202506018.1.0\"\nreqwest = { version = \"0.12\", features = [\"json\"] }\nserde = { version = \"1.0\", features = [\"derive\"] }\n# ... other dependencies\n```\n\n## API Documentation\n\n- \u003chttps://rsshub.app/api/reference\u003e\n\n## References\n\n- \u003chttps://github.com/glidea/zenfeed\u003e\n- \u003chttps://github.com/RechardLLee/RSSHUB-MCP\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flongcipher%2Frsshub-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flongcipher%2Frsshub-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flongcipher%2Frsshub-mcp/lists"}