Skip to main content
Glama
the0807

geeknews-mcp-server

by the0807

GeekNews MCP Server

이 프로젝트는 GeekNews에서 아티클을 가져오는 Model Context Protocol(MCP) 서버입니다. Python으로 구현되었으며, BeautifulSoup을 사용하여 웹 스크래핑을 수행합니다. 서버 부하를 줄이기 위해 하루에 한 번 자동으로 데이터를 파싱하고 캐시에 저장하는 기능을 제공합니다.

기능

tool1

tool2

example

example

도구 (Tools)

  • get_articles 도구: GeekNews에서 아티클을 가져오는 기능

    • 아티클 유형(top, new, ask, show)과 반환할 아티클 수를 지정할 수 있음

    • 각 응답에는 제목, URL, 포인트, 작성자, 시간, 댓글 수, 순위 정보가 포함됨

    • 캐시된 데이터를 사용하여 서버 부하 감소

  • get_weekly_news 도구: GeekNews에서 주간 뉴스를 가져오는 기능

    • 특정 주간 뉴스 ID를 지정하거나 가장 최근 주간 뉴스를 가져올 수 있음

    • 주간 뉴스의 제목, 번호, ID, 내용, URL, 아이템 목록 등의 정보를 제공

    • 각 아이템에는 제목, URL, 순위 정보가 포함됨

    • 캐시된 데이터를 사용하여 서버 부하 감소

캐시 기능

  • 하루에 한 번 자동으로 데이터를 파싱하고 캐시에 저장

  • 캐시된 데이터가 유효한 경우 GeekNews 서버에 요청하지 않고 캐시된 데이터 사용

  • 캐시 데이터는 24시간 동안 유효하며, 이후 자동으로 갱신

  • 스케줄러가 주기적으로 캐시 유효성을 검사하고 필요시 갱신

Related MCP server: Mozilla Readability Parser MCP Server

사용법

  • Smithery를 이용한 설치

    🚀 geeknews-mcp-server

  • MCP 설정 파일에 서버 정보를 추가

    {
    "mcpServers": {
       "geeknews-mcp-server": {
          "command": "npx",
          "args": [
          "-y",
          "@smithery/cli@latest",
          "run",
          "@the0807/geeknews-mcp-server",
          "--key",
          "smithery에서 발급 받은 키"
          ]
       }
    }
    }

로컬 설치 방법

  1. Git Clone

    git clone https://github.com/the0807/GeekNews-MCP-Server
    cd GeekNews-MCP-Server
  2. uv로 환경 세팅

    uv sync
  3. 가상환경 실행

    uv venv
    source .venv/bin/activate
  4. MCP Inspector로 서버 테스트

    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 폴더에 저장됩니다.

Available Tools

2 tools
get_articlesA
        GeekNews에서 아티클을 가져오는 도구
        
        Args:
            type: 아티클 유형 (top, new, ask, show)
            limit: 반환할 아티클 수 (최대 30)
        
        Returns:
            List[Dict[str, Any]]: 아티클 목록
            
        Raises:
            ValueError: 유효하지 않은 아티클 유형이 지정된 경우
        
ParametersJSON Schema
NameRequiredDescriptionDefault
typeNotop
limitNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return type (List[Dict[str, Any]]) and raises a ValueError for invalid types, adding some context. However, it doesn't cover important aspects like rate limits, authentication needs, or whether it's read-only/destructive, leaving gaps for a tool with parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for Args, Returns, and Raises, making it easy to scan. It's appropriately sized with no redundant sentences. However, the initial purpose statement could be more front-loaded for immediate clarity, though it's still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 parameters, no annotations, and no output schema, the description is moderately complete. It covers parameters and return values adequately but lacks behavioral details like error handling beyond ValueError, performance constraints, or sibling tool differentiation. It's sufficient for basic use but has clear gaps for full contextual understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains that 'type' is the article type with valid values (top, new, ask, show) and 'limit' is the number of articles to return with a maximum of 30. This fully compensates for the schema's lack of descriptions, providing clear semantics for both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'GeekNews에서 아티클을 가져오는 도구' (Get articles from GeekNews). It specifies the verb '가져오는' (get/fetch) and resource '아티클' (articles), making the action explicit. However, it doesn't distinguish from the sibling tool 'get_weekly_news', which likely serves a different purpose but isn't contrasted here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions parameters and returns but doesn't explain context, prerequisites, or comparisons to 'get_weekly_news'. Usage is implied through parameter details but lacks explicit when/when-not instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weekly_newsB
        GeekNews에서 주간 뉴스를 가져오는 도구
        
        Args:
            weekly_id: 주간 뉴스 ID (빈 문자열인 경우 가장 최근 주간 뉴스를 가져옴)
            
        Returns:
            Dict[str, Any]: 주간 뉴스 정보
        
ParametersJSON Schema
NameRequiredDescriptionDefault
weekly_idNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool fetches weekly news but doesn't describe what '가져오는' entails (e.g., read-only operation, data format, potential errors, or rate limits). For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior and safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, with the core purpose stated first in a single sentence. The Args and Returns sections are structured clearly, though the inclusion of type hints like 'Dict[str, Any]' adds minor verbosity without schema support. Overall, it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is somewhat complete but has gaps. It covers the parameter semantics well but lacks behavioral details and usage guidelines relative to the sibling tool. Without annotations or output schema, more context on what the tool returns or how it behaves would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics beyond the input schema, which has 0% coverage. It explains that 'weekly_id' is a weekly news ID and specifies that an empty string fetches the most recent weekly news, clarifying the parameter's purpose and default behavior. This compensates well for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'GeekNews에서 주간 뉴스를 가져오는 도구' (Get weekly news from GeekNews). It specifies the verb '가져오는' (get/fetch) and the resource '주간 뉴스' (weekly news). However, it doesn't explicitly differentiate from the sibling tool 'get_articles', which might also retrieve news content, leaving some ambiguity about when to use each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_articles'. It mentions that an empty weekly_id fetches the most recent weekly news, which is a usage hint, but lacks explicit context, prerequisites, or exclusions for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • First observedget_articles
    • First observedget_weekly_news

TDQS

B3.3/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: get_articles retrieves articles by type (top, new, ask, show) with a limit parameter, while get_weekly_news fetches weekly news by ID or the most recent one. There is no overlap in functionality or ambiguity between them.

Naming Consistency5/5

Both tools follow a consistent verb_noun naming pattern (get_articles and get_weekly_news), using snake_case throughout. The naming is predictable and readable without any deviations or mixed conventions.

Tool Count2/5

With only 2 tools, the server feels thin and under-scoped for a news domain. While the tools cover basic retrieval, there are likely missing operations (e.g., searching, filtering, or interacting with articles) that would enhance functionality, making the count too low for comprehensive coverage.

Completeness2/5

The tool surface is severely incomplete for a news server. It only provides read operations (get_articles and get_weekly_news) with no support for creating, updating, deleting, or searching articles. This lack of CRUD/lifecycle coverage will limit agent capabilities and cause failures in more complex workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    A Model Context Protocol (MCP) server that provides tools for searching and fetching information from Hacker News.
    4
    76
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Python implementation of an MCP server that extracts webpage content, removes ads and non-essential elements, and transforms it into clean, LLM-optimized Markdown.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Python-based MCP server that aggregates real-time trending topics and news from over 30 sources including social media, technology, and finance platforms. It enables AI applications to retrieve the latest hot searches and news from major services like Weibo, Baidu, and IT Home through a unified interface.
    31
    MIT