Skip to main content
Glama
erickwendel-contributions-mcp

erickwendel-contributions-mcp

by jdoliveirasa

erickwendel-contributions-mcp

CI Status npm version npm downloads

Erick Wendel의 기여 내역을 다양한 플랫폼에서 조회할 수 있는 도구를 제공하는 MCP(Model Context Protocol) 서버입니다. Claude, Cursor 등에서 자연어를 사용하여 강연, 블로그 게시물, 동영상을 조회할 수 있습니다. 이 프로젝트는 Cursor IDE의 기본 에이전트(평가판 버전)를 사용하여 구축되었습니다.

빠른 시작

설치 없이 Claude Desktop이나 Cursor에서 이 MCP 서버를 직접 사용하세요:

{
  "mcpServers": {
    "erickwendel-contributions": {
      "command": "npx",
      "args": ["-y", "@erickwendel/contributions-mcp"]
    }
  }
}

다음 설정을 추가하세요:

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)

  • Cursor: ~/.cursor/mcp.json

Related MCP server: mintlify-mcp

사용 가능한 도구

이 MCP 서버는 다음과 같은 기능을 제공합니다:

도구

  • get-talks: 선택적 필터링을 통해 페이지네이션된 강연 목록을 가져옵니다.

    • ID, 제목, 언어, 도시, 국가 및 연도별 필터링 지원

    • 언어, 국가 또는 도시별로 그룹화된 개수 반환 가능

  • get-posts: 선택적 필터링 및 페이지네이션을 통해 게시물을 가져옵니다.

    • ID, 제목, 언어 및 포털별 필터링 지원

  • get-videos: 선택적 필터링 및 페이지네이션을 통해 동영상을 가져옵니다.

    • ID, 제목 및 언어별 필터링 지원

  • check-status: API가 활성화되어 응답하는지 확인합니다.

프롬프트

  • find-content: 유형, 주제 및 언어별로 특정 콘텐츠를 찾는 쿼리 생성

  • summarize-activity: 연도별 콘텐츠 활동 요약 생성

리소스

  • erickwendel://about: 서버 정보 및 기능 메타데이터

  • erickwendel://statistics: 콘텐츠 통계 및 사용 가능한 쿼리

AI 도구와의 통합

MCP 서버 기능 검사

MCP Inspector를 사용하여 이 MCP 서버의 기능을 검사할 수 있습니다:

npm run inspect

여기에서 사용 가능한 모든 도구, 매개변수 및 사용 방법을 확인할 수 있습니다.

설정

  1. Node.js v20 이상을 사용 중인지 확인하세요.

node -v
# v20.x.x or higher
  1. 이 저장소를 복제합니다:

git clone https://github.com/erickwendel/erickwendel-contributions-mcp.git
cd erickwendel-contributions-mcp
  1. 의존성을 설치합니다:

npm ci
  1. 서버를 실행합니다:

npm start

AI 도구와의 통합

Cursor 설정

~/.cursor/mcp.json에 다음 설정을 추가하세요:

{
  "mcpServers": {
    "erickwendel-contributions": {
      "command": "npx",
      "args": ["-y", "@erickwendel/contributions-mcp"]
    }
  }
}

왼쪽 하단 드롭다운에서 "Agent"를 선택하여 Cursor 채팅이 에이전트 모드인지 확인한 다음, "how many videos were published about JavaScript in 2024"라고 질문해 보세요:

로컬 개발

로컬 개발 시에는 프로젝트의 절대 경로를 사용하세요:

{
  "mcpServers": {
    "erickwendel-contributions": {
      "command": "node",
      "args": ["--experimental-strip-types", "ABSOLUTE_PATH_TO_PROJECT/src/index.ts"]
    }
  }
}

Claude Desktop 설정

  1. Claude 설정으로 이동합니다.

  2. 개발자(Developer) 탭을 클릭합니다.

  3. 설정 편집(edit config)을 클릭합니다.

  4. 코드 편집기에서 설정을 엽니다.

  5. ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)에 다음 설정을 추가합니다:

{
  "mcpServers": {
    "erickwendel-contributions": {
      "command": "npx",
      "args": ["-y", "@erickwendel/contributions-mcp"]
    }
  }
}

로컬 개발

로컬 개발 시에는 프로젝트의 절대 경로를 사용하세요:

{
  "mcpServers": {
    "erickwendel-contributions": {
      "command": "node",
      "args": ["--experimental-strip-types", "ABSOLUTE_PATH_TO_PROJECT/src/index.ts"]
    }
  }
}

Ollama를 사용하는 MCPHost (무료 대안)

Claude Desktop이나 Cursor에 액세스할 수 없는 경우, 무료 대안으로 Ollama와 함께 MCPHost를 사용할 수 있습니다.

  1. MCPHost 설치:

go install github.com/mark3labs/mcphost@latest
  1. 설정 파일 생성 (예: ./mcp.jsonc):

{
  "mcpServers": {
    "erickwendel-contributions": {
      "command": "npx",
      "args": ["-y", "@erickwendel/contributions-mcp"]
    }
  }
}
  1. Ollama로 실행:

ollama pull MODEL_NAME
mcphost --config ./mcp.jsonc -m ollama:MODEL_NAME

로컬 개발

로컬 개발 시 설정을 업데이트하세요:

{
  "mcpServers": {
    "erickwendel-contributions": {
      "command": "node",
      "args": ["--experimental-strip-types", "ABSOLUTE_PATH_TO_PROJECT/src/index.ts"]
    }
  }
}

쿼리 예시

Claude, Cursor 또는 모든 MCP 클라이언트에 질문할 수 있는 쿼리 예시는 다음과 같습니다:

  1. "How many talks were given in 2023?"

  1. "Show me talks in Spanish"

  1. "Find posts about WebXR"

개발

특징

  • Model Context Protocol (MCP)로 구축됨

  • 전체 MCP 기능: 도구, 프롬프트 및 리소스

  • TypeScript 및 Zod 스키마 유효성 검사를 통한 타입 안전성

  • 트랜스파일 없이 Node.js에서 기본 TypeScript 지원

  • GenQL을 사용하여 생성된 SDK

  • 관심사 분리가 적용된 모듈식 아키텍처

  • 쉬운 통합을 위한 표준 I/O 전송

  • 구조화된 오류 처리

  • Claude Desktop, Cursor 및 MCPHost (무료 대안)와 호환

참고: 이 프로젝트는 작년에 추가된 기본 TypeScript 지원을 사용하므로 Node.js v23 이상이 필요합니다.

아키텍처

코드베이스는 모듈식 구조를 따릅니다:

src/
  ├── config/      # Configuration settings
  ├── types/       # TypeScript interfaces and types
  ├── tools/       # MCP tool implementations
  ├── utils/       # Utility functions
  ├── services/    # API service layer
  └── index.ts     # Main entry point

테스트

테스트 모음을 실행하려면:

npm test

감시 모드(watch)로 개발하려면:

npm run test:dev

기여

기여를 환영합니다! 자유롭게 Pull Request를 제출해 주세요.

작성자

Erick Wendel

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

Available Tools

4 tools
check_statusA

Check if the API is alive and responding.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the tool performs a liveness check, implying a read-only operation, but it does not disclose what response to expect, error behavior, or whether any side effects occur. This is adequate for a zero-parameter tool but lacks depth.

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

Conciseness5/5

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

The description is a single sentence, perfectly concise and front-loaded. It conveys the tool's purpose without any extraneous information or repetition of the tool name.

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

Completeness4/5

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

Given the tool's simplicity (zero parameters, no output schema, no annotations), the description adequately conveys the core purpose. It could be improved by mentioning the expected return value or how to interpret 'responding,' but for a basic health check, the description is sufficiently complete.

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 tool has zero parameters, so the input schema fully covers any parameter semantics. The description adds no parameter details because none are necessary. Per the rubric, 0 parameters warrants a baseline score of 4.

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

Purpose5/5

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

The description uses a specific verb 'check' and clearly identifies the resource ('the API'), making the tool's purpose unambiguous. It is distinctly different from sibling tools like get_talks, get_posts, and get_videos, which retrieve content rather than verify API health.

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

Usage Guidelines3/5

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

The description implies usage: if you need to verify the API is alive, use this tool. However, there is no explicit guidance on when to use it versus alternatives, nor any mention of prerequisites or exclusions. The context of sibling get_* tools suggests a read-only health check, but this is not stated.

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

get_postsB

Get a list of posts with optional filtering and pagination.

NameRequiredDescriptionDefault
idNoFilter posts by ID
titleNoFilter posts by title
languageNoFilter posts by language
portalNoFilter posts by portal
skipNoNumber of posts to skip
limitNoMaximum number of posts to return

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden, but it only says "Get a list of posts" and mentions filtering/pagination. It does not disclose whether the operation is read-only, requires authentication, has rate limits, or what the response structure is.

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

Conciseness5/5

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

The description is a single concise sentence that is front-loaded with the core action and resource. It avoids redundancy and is appropriately sized for a simple list operation.

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?

For a tool with 6 optional parameters and no output schema, this description is minimal but functionally adequate. It lacks context on filtering semantics (e.g., exact vs partial match), ordering, or intended use cases, but the core purpose is clear.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description echoes the schema by mentioning "optional filtering" but adds no new detail about parameter values, defaults already in the schema, or filtering behavior.

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

Purpose5/5

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

The description clearly states the tool gets a list of posts, using a specific verb ("Get") and resource ("posts"), and distinguishes it from siblings like get_talks and get_videos by the resource type.

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?

No guidance is provided on when to use this tool versus alternatives. It does not mention that get_talks or get_videos should be used for other content types, or any conditional context for choosing this tool.

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

get_talksA

Get a list of talks with optional filtering and pagination.

NameRequiredDescriptionDefault
idNoFilter talks by ID
titleNoFilter talks by title
languageNoFilter talks by language (e.g., 'spanish', 'english', 'portuguese' or direct codes like 'es', 'en', 'pt-br')
cityNoFilter talks by city
countryNoFilter talks by country
yearNoFilter talks by year
skipNoNumber of talks to skip
limitNoMaximum number of talks to return
count_onlyNoIf true, returns only the count without talk details
group_byNoGroup counts by a specific field (language, country, city)

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It mentions optional filtering and pagination, adding some behavioral context. However, it doesn't disclose details like whether count_only changes the response shape, how group_by interacts with filters, or any rate limits. It's acceptable but not rich.

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

Conciseness5/5

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

The description is a single concise sentence that captures the core functionality without waste. It is front-loaded with the main purpose and includes key capabilities (filtering, pagination) in an efficient way.

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 10 parameters, no output schema, and no annotations, the description is minimal. It covers the basic purpose and mentions pagination/filtering, but it does not explain return values, edge cases, or how parameters combine. The schema descriptions help, but the overall context is not fully complete for a complex tool.

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

Parameters3/5

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

Schema description coverage is 100%, meaning every parameter has a description in the schema. The tool description itself lists no parameter details, but since the schema already documents all ten parameters, the description does not need to repeat them. The baseline of 3 is appropriate because the schema does the heavy lifting.

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 states the tool lists talks with optional filtering and pagination, which is clear and specific. It does not explicitly distinguish it from sibling tools like get_posts or get_videos, but the resource 'talks' is unique enough that it's not misleading. The verb 'get a list' is clear.

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

Usage Guidelines3/5

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

The description implies this is for retrieving talk data, but it does not provide explicit when-to-use guidance or contrast with alternatives. Sibling tools are present, but no exclusions or preferred scenarios are given, so usage context is only implied.

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

get_videosA

Get a list of videos with optional filtering and pagination.

NameRequiredDescriptionDefault
idNoFilter videos by ID
titleNoFilter videos by title
languageNoFilter videos by language
skipNoNumber of videos to skip
limitNoMaximum number of videos to return

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It conveys that the tool is read-only and supports filtering and pagination, but it does not disclose return format, default values, ordering, or other behaviors. This is acceptable for a simple list tool but leaves room for ambiguity.

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

Conciseness5/5

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

The description is a single sentence that is concise, front-loaded with the core purpose, and contains no filler or redundant information. Every word earns its place.

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?

With five parameters and no output schema, the description is simplistic. It covers the basic functionality but omits return structure and parameter behaviors (e.g., exact vs. partial matching, default pagination values). For a straightforward list tool, this is adequate but not complete, especially given the lack of annotations or output schema.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter (id, skip, limit, title, language) described in the schema. The description adds a high-level mention of 'optional filtering and pagination' but no additional detail beyond the schema, so the baseline 3 applies.

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 lists videos, using the verb 'Get' with the resource 'videos', and mentions optional filtering and pagination. It is specific enough to distinguish from sibling tools by resource name, though it does not explicitly differentiate itself from get_talks or get_posts beyond that.

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

Usage Guidelines3/5

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

The description implies when to use this tool: when listing videos with optional filters or pagination. However, it provides no explicit guidance on when not to use it or mention of alternatives like get_talks or get_posts, leaving usage context implied rather than explicit.

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. 4 tool updatesv1.1.4
    • First observedcheck_status
    • First observedget_posts
    • First observedget_talks
    • First observedget_videos

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct resource or action: check_status is for API health, while get_posts, get_talks, and get_videos retrieve different content types. No overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using underscores (check_status, get_posts, get_talks, get_videos), making them predictable.

Tool Count5/5

With 4 tools, the set is well-scoped for a contributions-focused MCP, covering essential retrieval operations without being too sparse or bloated.

Completeness4/5

The tool surface provides read operations for all contribution types and a health check, but lacks write or update operations, which may be acceptable for a read-only server but leaves minor gaps.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables users to query any Mintlify-powered documentation site directly from Claude. It leverages Mintlify's AI Assistant API to provide RAG-based answers and code examples for various platforms like Agno, Resend, and Upstash.
    16 npm
    18
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that ingests various data sources and uses LLMs to compile them into structured knowledge pages, enabling hybrid search and integration with AI coding tools like Claude Code and Cursor.
    17 npm
    1
    MIT