Skip to main content
Glama
zaswear

gamecalendar-mcp

by zaswear

gamecalendar-mcp

Servidor MCP para la base de datos de GameCalendar (Neon Postgres). Permite a Claude consultar —y opcionalmente modificar— los datos del sitio directamente, sin pasar por la web.

Seguridad: lectura libre, escritura opt-in

  • Lectura: siempre disponible.

  • Escritura: solo si defines GAMECALENDAR_MCP_WRITE=1. Sin esa variable, las tools de escritura ni se registran (Claude no puede llamarlas).

  • delete_blog_post es destructiva y exige confirm=true explícito.

  • update_game solo toca campos editables a mano (section, score, opencritic_score, early_access, trailer); el resto lo gestiona el sync de IGDB.

Related MCP server: TeamDesk MCP Server

Tools

Tool

Modo

Qué hace

list_releases

lectura

Juegos por sección/plataforma

search_games

lectura

Busca juegos por nombre

get_game

lectura

Ficha completa (id o slug)

list_blog_posts

lectura

Posts (con o sin borradores)

get_blog_post

lectura

Post completo por slug

db_stats

lectura

Resumen de la DB

create_blog_post

escritura

Crea post (borrador por defecto)

update_blog_post

escritura

Edita campos de un post

set_blog_published

escritura

Publica / despublica

delete_blog_post

escritura

Borra (requiere confirm=true)

update_game

escritura

Edita campos seguros de un juego

Variables de entorno

Variable

Obligatoria

Descripción

DATABASE_URL

sí

Cadena de conexión Neon (la misma de gamecalendar)

GAMECALENDAR_MCP_WRITE

no

1 para habilitar escritura

Conectarlo a Claude Code

Con el CLI (recomendado), solo lectura:

claude mcp add gamecalendar \
  --env DATABASE_URL="postgres://...neon..." \
  -- node /home/zaswear/projects/packages/gamecalendar-mcp/index.js

Con escritura habilitada, añade el flag:

claude mcp add gamecalendar \
  --env DATABASE_URL="postgres://...neon..." \
  --env GAMECALENDAR_MCP_WRITE=1 \
  -- node /home/zaswear/projects/packages/gamecalendar-mcp/index.js

O a mano, en la config MCP (~/.claude.json o .mcp.json del proyecto):

{
  "mcpServers": {
    "gamecalendar": {
      "command": "node",
      "args": ["/home/zaswear/projects/packages/gamecalendar-mcp/index.js"],
      "env": {
        "DATABASE_URL": "postgres://...neon...",
        "GAMECALENDAR_MCP_WRITE": "1"
      }
    }
  }
}

No pongas la DATABASE_URL en ningún archivo commiteado. Pásala por la config MCP (que es local) o por el entorno.

Probar sin Claude

pnpm -C packages/gamecalendar-mcp smoke          # solo lectura
pnpm -C packages/gamecalendar-mcp smoke --write  # comprueba que registran las tools de escritura

El smoke lee DATABASE_URL del .env de gamecalendar.

Available Tools

6 tools
db_statsEstadísticas de la DBA

Resumen: total de juegos por sección y nº de posts (publicados/borradores).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden. It states that the tool returns a summary, but it does not disclose behavioral traits such as whether it is read-only, requires authentication, or has any side effects. The description is minimal in this regard.

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 'Resumen'. Every word is necessary and no extraneous information is present. It is efficiently structured for quick parsing.

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 absence of an output schema and annotations, the description only partially informs the agent. It states the content (games by section, post counts) but not the return format or structure. For a simple statistics tool, this may be sufficient, but it leaves some ambiguity about how the data is presented.

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 no parameters, and the input schema is empty with 100% schema description coverage. The description does not need to add parameter semantics since there are none, and the baseline for zero parameters is 4. The description adequately implies no inputs are needed.

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's purpose: it provides a summary of total games by section and number of posts (published/drafts). This is a specific verb (summary) and resource (DB statistics), and it distinguishes itself from sibling tools like list_blog_posts or list_releases which return item lists rather than aggregated statistics.

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?

No explicit guidance is given on when to use this tool versus siblings. The description implies it is for a high-level summary, but it does not mention when not to use it or provide alternatives. Thus, usage guidelines are only implied.

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

get_blog_postDetalle de un postB

Post del blog completo (incluye body) por slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only mentions 'includes body', which is helpful, but omits key details like error handling (e.g., if slug not found), return format, or any required authentication.

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?

Extremely concise (4 words in Spanish). While it may be too brief, it front-loads the key information (full blog post, includes body, by slug) without unnecessary words.

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 no output schema, the description should be more complete. It covers the main functionality but lacks details on error scenarios, return fields beyond 'body', and pagination or filtering options (though not needed for a single post retrieval).

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

Parameters2/5

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

Schema coverage is 0%, so description must compensate. The phrase 'por slug' adds minimal context beyond the schema's 'slug' parameter name. It does not explain what a slug is or provide format examples.

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 that the tool returns a complete blog post including its body, identified by slug. It distinguishes from siblings like list_blog_posts which likely returns a list, and get_game which returns a game.

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 on when to use this tool versus alternatives. It does not explicitly state it is for retrieving a single post by slug, but that is implied; no when-not-to-use or alternative recommendations are provided.

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

get_gameDetalle de un juegoC

Ficha completa de un juego por id (número) o slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
slugNo

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It does not disclose behavioral traits such as whether it is a read-only operation, required authentication, or what happens when neither parameter is provided (e.g., returns error vs. all games). The description only states the basic purpose.

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

Conciseness3/5

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

The description is a single sentence, which is efficient and front-loaded with the core purpose. However, it is under-informative for the complexity of the tool (two optional parameters, no output schema). It sacrifices necessary detail for brevity.

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

Completeness2/5

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

Given the lack of output schema and annotations, the description is incomplete. It does not explain the return format, error behavior, or how to specify the game if both id and slug are provided. The tool is simple but still missing key contextual information.

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

Parameters2/5

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

The input schema has 0% description coverage. The description adds that 'id' is a number and 'slug' is a string, but provides no further details like format, validity constraints, or behavior if both are provided. The addition is minimal and does not fully compensate for the schema's lack of descriptions.

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 that it returns a complete game record (ficha completa) using an id or slug. The verb is implied (retrieve/get) and the resource is specified. However, it does not differentiate from sibling tools like search_games or list_releases, which could also return game data.

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 on when to use this tool versus alternatives. There is no mention of prerequisites, limitations, or exclusion criteria. A user must infer usage from the name and description alone.

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

list_blog_postsListar posts del blogC

Posts del blog. Por defecto solo publicados; include_drafts incluye borradores.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
include_draftsNo

TDQS

C2.1/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only mentions default visibility and a parameter. It omits critical behavioral traits such as read-only nature, pagination, ordering, or rate limits.

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

Conciseness3/5

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

The description is very short (14 words) but the first sentence is redundant with the title. It is not wasteful, but it sacrifices clarity for brevity.

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

Completeness2/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 output schema, and no annotations, the description is insufficient. Missing details on return format, pagination, ordering, and how to retrieve all posts (e.g., beyond default limit).

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

Parameters2/5

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

Schema coverage is 0%, so the description must explain all parameters. It only describes 'include_drafts' as including drafts, but does not mention the 'limit' parameter at all, leaving half the parameters undocumented.

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

Purpose2/5

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

The description 'Posts del blog' is a noun phrase that restates the title without an action verb, failing to clarify that the tool lists posts. The default behavior note adds context but does not compensate for the missing verb.

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 over siblings like 'get_blog_post' or 'search_games'. It only explains parameter defaults (include_drafts) without cross-tool comparisons.

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

list_releasesListar lanzamientosC

Juegos de una sección (upcoming/recent/anticipated/catalog), opcionalmente por plataforma.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
sectionNoupcoming
platformNo

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, and the description does not disclose behavioral traits such as read-only nature, performance implications, or response format. Only implicitly suggests listing via 'juegos de una sección.'

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

Conciseness3/5

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

The description is very concise (one short sentence), but it sacrifices completeness. It is front-loaded with the main purpose, yet lacks detail warranted by the tool's 4 parameters.

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

Completeness2/5

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

With no annotations, no output schema, and 4 parameters, the description fails to cover pagination, return format, or any behavioral context beyond the section and platform filter.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only explains section and platform partially, omitting limit and offset. Pagination parameters are not described.

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 indicates that the tool lists games from a given section (upcoming/recent/anticipated/catalog) and optionally filters by platform. It distinguishes from sibling search_games by focusing on browsing rather than text search.

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 about when to use this tool vs alternatives like search_games. The description simply states what it does without suggesting use cases or exclusions.

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

search_gamesBuscar juegosB

Busca juegos por nombre (coincidencia parcial, insensible a mayúsculas).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description bears full burden. It discloses partial matching and case-insensitivity, which are key behavioral traits. However, it omits important details like pagination, result format, or behavior when no results are found.

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 immediately conveys the core functionality. Every word is necessary and there is no redundant information.

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

Completeness2/5

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

Given the two parameters and absence of output schema or annotations, the description is too sparse. It does not cover the limit parameter, expected results, or any edge cases, making it incomplete for an agent to confidently invoke.

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

Parameters2/5

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

Schema description coverage is 0%; the description adds no meaning to the query or limit parameters. The schema itself provides type and constraints, but the description fails to elaborate on how parameters affect the search or what valid inputs are.

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 searches for games by name with partial match and case-insensitivity. 'Busca juegos por nombre (coincidencia parcial, insensible a mayúsculas)' specifies the action and resource distinctly from siblings like get_game (which likely retrieves by ID) or list_releases.

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 such as get_game or list_blog_posts. The description only states what it does without contextual recommendations or exclusions.

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. 6 tool updatesv1.0.0
    • First observeddb_stats
    • First observedget_blog_post
    • First observedget_game
    • First observedlist_blog_posts
    • First observedlist_releases
    • First observedsearch_games

TDQS

B3.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: db_stats for statistics, get_blog_post for a single post, get_game for a single game, list_blog_posts for listing posts, list_releases for filtered games, and search_games for search. No overlap in functionality.

Naming Consistency4/5

Most tools follow a verb_noun pattern with snake_case (e.g., get_blog_post, list_releases). The exception is db_stats, which uses an abbreviation instead of a verb-noun structure, but it remains clear and consistent with the overall style.

Tool Count5/5

With 6 tools, the server is well-scoped for a game calendar and blog querying system. Each tool addresses a specific need without redundancy or excessive granularity.

Completeness3/5

The tool set covers read operations (get, list, search, stats) for games and blog posts, but lacks any create, update, or delete operations. For a query-only server this might be acceptable, but the absence of write capabilities limits the surface for typical CRUD tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that exposes relational databases (PostgreSQL/MySQL) to AI agents with natural language to SQL query support.
    19
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for TeamDesk databases, enabling CRUD operations, search, and document generation via natural language.
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Security-first, read-only MCP server for Microsoft SQL Server, enabling safe natural-language querying of databases.
    5
    7 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server enabling natural-language querying of SQLite databases via schema discovery, GraphRAG retrieval, and safely guarded read-only SQL execution.
    -