An open API service indexing awesome lists of open source software.

https://github.com/the0807/GeekNews-MCP-Server

๐Ÿ“ฐ GeekNews MCP Server
https://github.com/the0807/GeekNews-MCP-Server

Last synced: 3 days ago
JSON representation

๐Ÿ“ฐ GeekNews MCP Server

Awesome Lists containing this project

README

        

# GeekNews MCP Server

[![smithery badge](https://smithery.ai/badge/@the0807/geeknews-mcp-server)](https://smithery.ai/server/@the0807/geeknews-mcp-server)

์ด ํ”„๋กœ์ ํŠธ๋Š” [GeekNews](https://news.hada.io)์—์„œ ์•„ํ‹ฐํด์„ ๊ฐ€์ ธ์˜ค๋Š” Model Context Protocol(MCP) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Python์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, BeautifulSoup์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์Šคํฌ๋ž˜ํ•‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์บ์‹œ์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

## ๊ธฐ๋Šฅ
|![tool1](img/tool1.png) |![tool2](img/tool2.png) |
|:-------------------------:|:-------------------------:|
|![example](img/example1.png)|![example](img/example2.png)|

### ๋„๊ตฌ (Tools)

- `get_articles` ๋„๊ตฌ: GeekNews์—์„œ ์•„ํ‹ฐํด์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ
- ์•„ํ‹ฐํด ์œ ํ˜•(top, new, ask, show)๊ณผ ๋ฐ˜ํ™˜ํ•  ์•„ํ‹ฐํด ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ
- ๊ฐ ์‘๋‹ต์—๋Š” ์ œ๋ชฉ, URL, ํฌ์ธํŠธ, ์ž‘์„ฑ์ž, ์‹œ๊ฐ„, ๋Œ“๊ธ€ ์ˆ˜, ์ˆœ์œ„ ์ •๋ณด๊ฐ€ ํฌํ•จ๋จ
- ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ

- `get_weekly_news` ๋„๊ตฌ: GeekNews์—์„œ ์ฃผ๊ฐ„ ๋‰ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ
- ํŠน์ • ์ฃผ๊ฐ„ ๋‰ด์Šค ID๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐ€์žฅ ์ตœ๊ทผ ์ฃผ๊ฐ„ ๋‰ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
- ์ฃผ๊ฐ„ ๋‰ด์Šค์˜ ์ œ๋ชฉ, ๋ฒˆํ˜ธ, ID, ๋‚ด์šฉ, URL, ์•„์ดํ…œ ๋ชฉ๋ก ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณต
- ๊ฐ ์•„์ดํ…œ์—๋Š” ์ œ๋ชฉ, URL, ์ˆœ์œ„ ์ •๋ณด๊ฐ€ ํฌํ•จ๋จ
- ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ

### ์บ์‹œ ๊ธฐ๋Šฅ

- ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์บ์‹œ์— ์ €์žฅ
- ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ GeekNews ์„œ๋ฒ„์— ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ
- ์บ์‹œ ๋ฐ์ดํ„ฐ๋Š” 24์‹œ๊ฐ„ ๋™์•ˆ ์œ ํšจํ•˜๋ฉฐ, ์ดํ›„ ์ž๋™์œผ๋กœ ๊ฐฑ์‹ 
- ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์บ์‹œ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ํ•„์š”์‹œ ๊ฐฑ์‹ 

## ์‚ฌ์šฉ๋ฒ•

- Smithery๋ฅผ ์ด์šฉํ•œ ์„ค์น˜

๐Ÿš€ [geeknews-mcp-server](https://smithery.ai/server/@the0807/geeknews-mcp-server)

- MCP ์„ค์ • ํŒŒ์ผ์— ์„œ๋ฒ„ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€

```json
{
"mcpServers": {
"geeknews-mcp-server": {
"command": "npx",
"args": [
"-y",
"@smithery/cli@latest",
"run",
"@the0807/geeknews-mcp-server",
"--key",
"smithery์—์„œ ๋ฐœ๊ธ‰ ๋ฐ›์€ ํ‚ค"
]
}
}
}
```

## ๋กœ์ปฌ ์„ค์น˜ ๋ฐฉ๋ฒ•

1. Git Clone

```bash
git clone https://github.com/the0807/GeekNews-MCP-Server
cd GeekNews-MCP-Server
```

2. uv๋กœ ํ™˜๊ฒฝ ์„ธํŒ…

```bash
uv sync
```

3. ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰

```bash
uv venv
source .venv/bin/activate
```

4. MCP Inspector๋กœ ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ

```bash
uv run mcp
mcp dev main.py

# ํ„ฐ๋ฏธ๋„์— ๋‚˜์˜ค๋Š” URL(MCP Inspector)๋กœ ์ ‘์†ํ•˜์—ฌ ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ
```

## ์ฝ”๋“œ ๊ตฌ์กฐ

- `src/models.py`: ์•„ํ‹ฐํด ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค ์ •์˜
- `src/parser.py`: GeekNews ์›น์‚ฌ์ดํŠธ์˜ HTML์„ ํŒŒ์‹ฑํ•˜์—ฌ ์•„ํ‹ฐํด ์ •๋ณด๋ฅผ ์ถ”์ถœ
- `src/client.py`: GeekNews ์›น์‚ฌ์ดํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” HTTP ํด๋ผ์ด์–ธํŠธ
- `src/config.py`: ์„ค์ •๊ณผ ์ƒ์ˆ˜ ์ •์˜
- `src/cache.py`: ์บ์‹œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์ œ๊ณต
- `src/scheduler.py`: ์ฃผ๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์Šค์ผ€์ค„๋Ÿฌ
- `src/server.py`: MCP ์„œ๋ฒ„ ๊ตฌํ˜„
- `main.py`: ์„œ๋ฒ„ ์‹คํ–‰ ์ง„์ž…์ 

> [!Note]
> - ์ด ์„œ๋ฒ„๋Š” GeekNews ์›น์‚ฌ์ดํŠธ์˜ HTML ๊ตฌ์กฐ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์›น์‚ฌ์ดํŠธ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํŒŒ์‹ฑ ๋กœ์ง์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
> - ์บ์‹œ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜ `.cache/geeknews-mcp` ํด๋”์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.