mcp-rpg-worldstate
MCP RPG Worldstate
Un servidor MCP local y neutral respecto al sistema que proporciona a una dirección de juego de IA una memoria permanente para mundos de juegos de rol. Almacena contenido narrativo principalmente como texto libre y estructura solo lo que es importante para la búsqueda y la coherencia: pertenencia al mundo, tipos de entidad, lugares, escenas, participantes y estados activos.
Idea rectora
Se almacenan hechos permanentes o narrativamente relevantes, no cualquier observación transitoria. Un control meteorológico planetario averiado puede ser importante; un peinado alterado por el viento, normalmente no.
La recuperación típica está deliberadamente escalonada:
list_worldsmuestra las partidas existentes.get_world_overviewproporciona una vista previa compacta de la partida.get_current_contextcarga la escena inmediatamente jugable.search_entitiesobtiene más detalles solo cuando es necesario.
Los cambios se pueden agrupar con apply_world_changes en una única llamada atómica.
Las entidades recién creadas pueden referirse entre sí dentro de la misma llamada mediante referencias locales. Un archivo compacto de eventos y checkpoints explica, si es necesario, cómo se ha llegado al estado actual, sin sustituir el estado del mundo autoritativo.
Related MCP server: Librarian
Requisitos e instalación
Node.js 24 o superior (para el módulo SQLite integrado)
npm
npm install
npm run build
npm testEl servidor utiliza por defecto rpg-worldstate.sqlite en el directorio de trabajo. Para una ubicación de almacenamiento estable y explícita, se debe establecer RPG_WORLDSTATE_DB como ruta absoluta.
Configuración de MCP
Un cliente MCP local puede iniciar el servidor a través de stdio. El patrón general de configuración es:
{
"mcpServers": {
"rpg-worldstate": {
"command": "node",
"args": [
"/home/eurobertics/projects/mcp_rpg_worldstate/dist/index.js"
],
"env": {
"RPG_WORLDSTATE_DB": "/home/eurobertics/projects/mcp_rpg_worldstate/rpg-worldstate.sqlite"
}
}
}
}La ubicación exacta de esta configuración depende del cliente MCP utilizado. El servidor escribe mensajes de registro exclusivamente en stderr, para que el protocolo MCP permanezca limpio en stdout.
Claude Desktop en Windows con servidor en WSL
Si Claude Desktop se ejecuta en Windows, pero el servidor MCP está instalado dentro de WSL, Claude puede iniciarlo mediante wsl.exe. La configuración se encuentra normalmente en:
%APPDATA%\Claude\claude_desktop_config.jsonEjemplo:
{
"mcpServers": {
"rpg-worldstate": {
"command": "wsl.exe",
"args": [
"-d",
"Ubuntu",
"--exec",
"bash",
"-lc",
"cd /home/eurobertics/projects/mcp_rpg_worldstate && RPG_WORLDSTATE_DB=/home/eurobertics/projects/mcp_rpg_worldstate/rpg-worldstate.sqlite exec node dist/index.js"
]
}
}
}Ubuntu debe corresponder al nombre exacto de la distribución WSL utilizada. PowerShell muestra las distribuciones instaladas con el siguiente comando:
wsl.exe --list --quietbash -lc carga una shell de inicio de sesión. Esto es especialmente importante si Node.js se instaló mediante un gestor de versiones como fnm o nvm. La ruta del proyecto y de la base de datos son rutas de Linux dentro de WSL. La instrucción completa de shell debe seguir siendo un único elemento de args en la configuración JSON.
El inicio se puede comprobar directamente desde PowerShell antes de la configuración de Claude:
wsl.exe -d Ubuntu --exec bash -lc "cd /home/eurobertics/projects/mcp_rpg_worldstate && RPG_WORLDSTATE_DB=/home/eurobertics/projects/mcp_rpg_worldstate/rpg-worldstate.sqlite exec node dist/index.js"Si el inicio es correcto, aparece en stderr, por ejemplo:
mcp-rpg-worldstate is using /home/eurobertics/projects/mcp_rpg_worldstate/rpg-worldstate.sqliteEl proceso permanece activo y espera mensajes MCP a través de stdin. Ese es el comportamiento esperado. Después de modificar el archivo de configuración, Claude Desktop debe cerrarse por completo y reiniciarse.
Nota de ChatGPT: Esta configuración utiliza el transporte local
stdiode Claude Desktop. No se puede adoptar sin cambios para ChatGPT Desktop. Para ello, el servidor tendría que ofrecerse además a través de un transporte HTTP compatible con ChatGPT y una URL accesible.
Herramientas
Herramienta | Propósito |
| Lista compacta de todas las partidas |
| Crear un mundo/campaña nuevo y aislado |
| Cambiar la descripción permanente del mundo o el resumen breve |
| Eliminar recursivamente el mundo con todos sus datos dependientes |
| Crear, modificar o eliminar entidades de forma agrupada |
| Buscar personajes, lugares, tramas, notas y objetos |
| Registrar de forma compacta la escena actual y sus participantes |
| Cargar una vista previa de la partida con pocos tokens |
| Cargar el contexto jugable actual |
| Guardar un resumen seguro para jugadores y notas opcionales del GM |
| Leer eventos relevantes paginados o desde un checkpoint |
| Cargar estados de sesiones y capítulos anteriores paginados |
| Números aleatorios neutrales para decisiones narrativas |
Los tipos de entidad son character, location, plot, note e item. Un personaje u objeto puede recibir una ubicación actual mediante locationId. Los lugares se pueden anidar con parentId. La participación en la escena es independiente de ello: un breve cambio de escena compartido no tiene que modificar automáticamente todas las ubicaciones permanentes.
Referencias locales en un lote
Las operaciones de creación pueden definir una ref única dentro de la llamada. Otros cambios pueden usarla con locationRef o parentRef, incluso si la operación de creación referenciada aparece más tarde en el array:
{
"worldId": 1,
"changes": [
{
"action": "create",
"ref": "mara",
"kind": "character",
"name": "Mara",
"locationRef": "tavern"
},
{
"action": "create",
"ref": "cellar",
"kind": "location",
"name": "Weinkeller",
"parentRef": "tavern"
},
{
"action": "create",
"ref": "tavern",
"kind": "location",
"name": "Zum hinkenden Drachen"
}
],
"summary": "Mara und ihr Gasthaus wurden eingeführt."
}La respuesta contiene createdRefs con los IDs numéricos generados. Las referencias desconocidas, duplicadas o circulares, así como la indicación simultánea de, por ejemplo, locationId y locationRef, abortan toda la transacción.
Eventos, secretos y checkpoints
Un summary en apply_world_changes genera una entrada de evento histórica compacta. En cuanto el lote afecta a una entidad secreta, el resumen debe marcarse como secreto con eventSecret: true u omitirse. Así, ningún cambio secreto puede aparecer accidentalmente en el historial público de eventos.
get_recent_events devuelve eventos por defecto en el orden id DESC, admite beforeId para la paginación hacia atrás, búsqueda de texto y sinceCheckpointId. Cada checkpoint almacena internamente el estado de eventos de ese momento, de modo que «¿Qué ocurrió desde este checkpoint?» se puede responder sin ambigüedad.
list_checkpoints devuelve también los checkpoints más antiguos, primero los más recientes, y pagina mediante beforeId.
Checkpoints seguros para jugadores
Cada nuevo checkpoint separa dos canales de información:
{
"worldId": 1,
"title": "Die Nacht im hinkenden Drachen",
"playerRecap": "Bernd fand im Keller eine königliche Münze. Mara behauptete, sie noch nie gesehen zu haben.",
"gmNotes": "Mara ist die verschwundene Königin."
}playerRecapes obligatorio y está destinado exclusivamente a hechos ya observados, revelados o razonablemente conocidos.gmNoteses opcional y siempre está destinado exclusivamente al director de juego.Las identidades ocultas, motivos, causas, planes, lugares y desarrollos futuros nunca pertenecen a
playerRecap.En caso de duda, una información pertenece a
gmNotes, a una entidad secreta o a un evento secreto, no al resumen público.
El servidor no clasifica, depura ni reformula contenidos automáticamente. La IA que realiza la llamada es responsable de la clasificación correcta. Las entidades y los eventos siguen siendo la fuente autoritativa; los checkpoints son vistas previas narrativas compactas de la partida.
get_world_overview y list_checkpoints devuelven por defecto exclusivamente playerRecap. gmNotes solo se emite como campo separado con includeSecrets: true. Esta opción solo puede utilizarse en un contexto legítimo de director de juego. El servidor nunca fusiona ambos textos.
La entrada anterior summary para create_checkpoint ya no se acepta. Por lo tanto, cada nuevo cliente debe crear explícitamente un resumen seguro para los jugadores.
Migraciones de base de datos
El esquema se versiona mediante PRAGMA user_version de SQLite. Al iniciar el servidor, las bases de datos antiguas se migran automáticamente al estado actual dentro de transacciones. Los contenidos antiguos de summary de checkpoints se consideran potencialmente secretos por precaución: se trasladan a gmNotes y en público se sustituyen solo por un aviso neutral. Un resumen antiguo nunca se publica automáticamente como conocimiento de los jugadores. No obstante, antes de un cambio de versión se recomienda hacer una copia de seguridad del archivo SQLite.
Skill opcional de Codex
En skills/rpg-worldstate-gm se encuentra una pequeña skill complementaria con reglas para la carga moderada, cambios de estado relevantes, secretos y checkpoints. No es necesaria para el servidor MCP ni para otros clientes.
Para la instalación local, la carpeta se puede copiar al directorio personal de skills de Codex:
cp -R skills/rpg-worldstate-gm ~/.codex/skills/Eliminación y consistencia
delete_world exige por seguridad la confirmación exacta DELETE: <Weltname>. Después, SQLite elimina mediante cascadas de claves foráneas todos los personajes, lugares, tramas, escenas, checkpoints y eventos de ese mundo.
Las vinculaciones entre mundos diferentes se rechazan. Los cambios agrupados se ejecutan en una transacción: si un cambio no es válido, no se guarda ninguno de ellos.
Desarrollo
npm run dev
npm run check
npm testLos archivos más importantes son:
src/store.ts: esquema SQLite, validación y consultassrc/server.ts: herramientas MCP públicas y esquemas de entradasrc/index.ts: punto de entrada local stdiosrc/*.test.ts: pruebas de base de datos y de protocolo MCP
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides persistent, local-first AI memory across sessions via MCP tools for storing, searching, and retrieving context from past interactions.1MIT
- AlicenseNot gradedqualityAmaintenanceProvides AI agents with persistent knowledge storage, enabling them to store, search, and retrieve text, documents, and files using semantic and keyword search via MCP tools.31Apache 2.0
- AlicenseAqualityDmaintenanceProvides persistent memory with semantic search for MCP-based AI agents, enabling them to store and recall information across sessions using vector embeddings.41MIT
- AlicenseCqualityCmaintenancePersistent semantic memory for MCP-compatible agents, enabling them to remember and recall text, audio, and documents across sessions.1066MIT
Related MCP Connectors
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Shared long-term memory vault for AI agents with 20 MCP tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Eurobertics/mcp_rpg_worldstate'
If you have feedback or need assistance with the MCP directory API, please join our Discord server