Skip to main content
Glama
README.md
# ttt-mcp — Tic-Tac-Toe MCP Server

A minimal MCP server exposing a tic-tac-toe game as tools, intended to be played by Claude (via Claude Desktop) against a human via chat.

## Tools exposed

- `new_game` — reset to empty board, X to move
- `get_state` — return current board + status
- `make_move(row, col)` — place the current player's mark; server alternates turns

## Setup

```bash
cd ttt-mcp
npm install
npm run build
```

## Wire it into Claude Desktop

Edit your `claude_desktop_config.json`:

- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`

Add (or merge into) this:

```json
{
  "mcpServers": {
    "tic-tac-toe": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/ttt-mcp/dist/index.js"]
    }
  }
}
```

Replace the path with your actual absolute path. **Then fully quit and restart Claude Desktop.**

## Verify it loaded

In Claude Desktop, open a new chat and look for the MCP tools indicator (slider/plug icon near the input). You should see `tic-tac-toe` listed with three tools.

If it's missing, check Claude Desktop's MCP logs:
- macOS: `~/Library/Logs/Claude/mcp*.log`

## Test outside Claude Desktop

You can poke the server directly with the official inspector:

```bash
npm run inspect
```

This launches a web UI that lets you call the tools manually — handy for debugging.

## Playing

In Claude Desktop chat, just say: *"Let's play tic-tac-toe. You start."*

I'll call `new_game`, make a move, and we go from there. When it's your turn, tell me your move ("row 1 column 2") and I'll call `make_move` on your behalf, then take my own turn.

## What to add next

- Per-conversation game state (currently single global state)
- AI difficulty levels (right now I just decide moves myself in chat)
- Replay history / undo
- Multiple game rooms
- Web frontend that subscribes to state changes

TDQS

A4/5.0

Scored across 35 tools

Disambiguation5/5

Each tool is prefixed by a unique game abbreviation (bs, cc, ms, ot, ttt), making it immediately clear which game they belong to. Within each group, tools have distinct action names, so an agent can easily select the correct tool for a given game and task.

Naming Consistency5/5

All tools follow a consistent 'prefix_verb_noun' pattern, using snake_case throughout. For example, bs_new_game, cc_explore, ms_reveal_cell, ot_travel, ttt_make_move. There are no deviations in style or convention.

Tool Count4/5

With 35 tools across four distinct games, the count is on the higher side but well-justified by the complexity of each game (e.g., Oregon Trail has 12 tools, Critter Catch has 11). No tool feels superfluous, and the overall scope is appropriate for a multi-game server.

Completeness5/5

Each game's toolset covers the core gameplay loop comprehensively: Battleship covers firing and state; Critter Catch covers exploration, catching, and party management; Minefield covers revealing, flagging, and turns; Oregon Trail covers travel, supplies, health, and events; Tic-Tac-Toe covers moves and state. No obvious gaps are apparent.

Maintenance

ActivityInactive
ResponsivenessNo issues