Hacker新闻API服务

一个基于Spring Boot的MCP服务器,提供对Hacker News API的RESTful接口,支持缓存和非阻塞请求,适用于需要集成Hacker News内容的客户端应用。

  • by vishgupt
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 vishgupt/hkn-mcp-server

使用说明

黑客新闻MCP服务器

一个基于Spring Boot的MCP(Model-Controller-Provider)服务器,为Hacker News API提供RESTful API接口。此服务器旨在与Windsurf等MCP客户端无缝协作。

特性

  • 黑客新闻内容的RESTful API端点
  • 使用Caffeine支持缓存
  • 非阻塞WebClient实现
  • 全面的测试覆盖率
  • 易于与MCP客户端集成

先决条件

  • Java 17或更高版本
  • Gradle 8.5或更高(通过Gradle Wrapper提供)

建设项目

  1. 克隆存储库:

    git clone <repository-url>
    cd hkn-mcp-server
    
  2. 构建项目:

    ./gradlew build
    
  3. 运行测试:

    ./gradlew test
    
  4. 运行应用程序:

    ./gradlew bootRun
    

默认情况下,服务器将在端口8080上启动。

API终点

按ID获取项目

GET /api/v1/news/item/{id}

通过ID检索特定的黑客新闻项。

获取头条新闻

GET /api/v1/news/top?limit={limit}

检索头条新闻。默认限制为30。

获取新故事

GET /api/v1/news/new?limit={limit}

检索最新的故事。默认限制为30。

获取最佳故事

GET /api/v1/news/best?limit={limit}

检索最佳故事。默认限制为30。

与MCP客户端一起使用

Windsurf集成

  1. 配置您的Windsurf客户端以指向此MCP服务器:

    {
      "mcp": {
        "server": "http://localhost:8080"
      }
    }
    
  2. MCP服务器公开以下资源类型:

    • hn_item:个人黑客新闻项目(故事、评论等)
    • hn_top:热门故事提要
    • hn_new:新故事提要
    • hn_best:最佳故事推送
  3. Windsurf查询示例:

    // Get a specific item
    GET mcp://hn_item/12345
    
    // Get top stories
    GET mcp://hn_top?limit=10
    
    // Get new stories
    GET mcp://hn_new?limit=20
    
    // Get best stories
    GET mcp://hn_best?limit=15
    

缓存

服务器使用Caffeine实现缓存,配置如下:

  • 最大缓存大小:1000个条目
  • 缓存过期时间:写入后5分钟
  • 为项目和故事列表单独缓存

发展

项目结构

src/
├── main/
│   ├── java/
│   │   └── com/mount/rainier/hkn/mcp/
│   │       ├── config/
│   │       ├── controller/
│   │       ├── model/
│   │       └── service/
│   └── resources/
└── test/
    └── java/
        └── com/mount/rainier/hkn/mcp/
            ├── config/
            ├── controller/
            ├── model/
            └── service/

运行测试

# Run all tests
./gradlew test

# Run specific test class
./gradlew test --tests "com.mount.rainier.hkn.mcp.service.HackerNewsServiceTest"

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 提交您的更改
  4. 推到分支
  5. 创建拉取请求

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。