Gameball MCP Server
# Gameball Integrations
Unified Model Context Protocol (MCP) server providing comprehensive access to Gameball's developer documentation and API integration.
## Features
This server combines two subsystems and a status tool:
### Documentation Tools (7 tools)
- **No API keys required** - Automatically fetches and indexes documentation from GitHub
- Search and browse Gameball developer docs
- Get API endpoint specifications
- Generate code examples in multiple languages (JavaScript, Python, C#, Go, PHP, Java)
- Access tutorials and guides
### Integration Tools (71 tools)
- **Requires API keys** - Make real API calls to Gameball's services
- Customer management (create, update, query, balance, tags, notifications)
- Transaction handling (cashback, redemption, holds, refunds, OTP)
- Order tracking and queries
- Coupon validation and burning
- Batch operations
- Configuration queries
- Referral system
- Leaderboards
- Events and payments
### Status Tool (1 tool)
- `gameball-status` - Shows server health, subsystem status, configuration, and cache info
**Total: 79 tools in one server**
## Installation
### Prerequisites
- Node.js >= 20
- Clone and build the project:
```bash
git clone <repository-url> gameball-integrations
cd gameball-integrations
npm install
npm run build
```
### Add to Your Project (recommended)
Create a `.mcp.json` file at the root of your project. Claude Code automatically detects this file and loads the MCP server for that workspace.
**Docs only** (no API keys needed):
```json
{
"mcpServers": {
"gameball": {
"command": "node",
"args": ["/path/to/gameball-integrations/dist/index.js"]
}
}
}
```
**Docs + Integration** (requires API keys):
```json
{
"mcpServers": {
"gameball": {
"command": "node",
"args": ["/path/to/gameball-integrations/dist/index.js"],
"env": {
"GAMEBALL_API_KEY": "your-api-key",
"GAMEBALL_SECRET_KEY": "your-secret-key"
}
}
}
}
```
> **Tip:** If the MCP repo is a sibling directory, use a relative path:
> `"args": ["../gameball-integrations/dist/index.js"]`
### Add Globally (all projects)
To make the tools available across all projects, add the config to `~/.claude/settings.json` under the same `mcpServers` structure shown above.
### Via Claude Code CLI
```bash
# Docs only
claude mcp add gameball node /path/to/gameball-integrations/dist/index.js
# With API keys
claude mcp add gameball node /path/to/gameball-integrations/dist/index.js \
-e GAMEBALL_API_KEY=your-api-key \
-e GAMEBALL_SECRET_KEY=your-secret-key
```
## Environment Variables
| Variable | Required | Description | Default |
|----------|----------|-------------|---------|
| `GAMEBALL_API_KEY` | For integration tools | Your Gameball API key | `""` |
| `GAMEBALL_SECRET_KEY` | For sensitive operations | Your Gameball secret key | `undefined` |
| `GAMEBALL_BASE_URL` | No | API base URL | `https://api.gameball.co` |
| `GITHUB_TOKEN` | No | GitHub token for higher rate limits | `undefined` |
## Tool Categories
### Documentation Tools (docs-* prefix)
All documentation tools work without API keys:
| Tool | Description |
|------|-------------|
| `docs-lookup-topic` | **START HERE** - Comprehensive lookup returning tutorials, docs, and API endpoints for a topic |
| `docs-get-doc` | Get full content of a specific documentation page |
| `docs-get-api-endpoint` | Get detailed API endpoint specification with parameters and schemas |
| `docs-generate-code-example` | Generate code examples in JavaScript, Python, C#, Go, PHP, or Java |
| `docs-search-docs` | Full-text search across all documentation |
| `docs-list-sections` | Browse documentation structure and available topics |
| `docs-get-tutorial` | Get step-by-step tutorial content |
### Integration Tools (by domain)
All integration tools require `GAMEBALL_API_KEY`. Tools marked with š also require `GAMEBALL_SECRET_KEY`.
#### Authentication (1 tool)
- `generate-session-token` - Generate JWT session token
#### Customers (21 tools)
- `create-customer`, `get-customer`, `update-customer`, `delete-customer`
- `get-customer-balance`, `adjust-customer-balance` š
- `get-customer-referrals`, `send-customer-notification`
- `get-customer-tags`, `add-customer-tag`, `remove-customer-tag`
- And more...
#### Transactions (13 tools)
- `cashback-transaction`, `redeem-points`, `redeem-points-otp`
- `hold-points`, `cancel-hold`, `refund-transaction`
- `query-transactions`, `reverse-transaction`
- And more...
#### Orders (4 tools)
- `track-order`, `refund-order`, `query-orders`, `cancel-order`
#### Coupons (7 tools)
- `validate-coupon`, `burn-coupon`, `lock-coupon`, `unlock-coupon`
- `revoke-burn-coupon`, `revoke-validation`, `list-customer-coupons`
#### Batch Operations (9 tools)
- `batch-adjust-balance`, `batch-send-events`, `batch-cashback`
- `batch-redeem`, `batch-refund`, `batch-hold`, `batch-cancel-hold`
- And more...
#### Configuration (10 tools)
- `get-action-config`, `get-challenge-config`, `get-level-config`
- `get-tier-config`, `query-tiers`, `query-levels`
- And more...
#### Other Domains
- **Custom** (2 tools): Utilities like customer count, cart tracking
- **Events** (1 tool): Send customer events
- **Leaderboard** (1 tool): Get leaderboard rankings
- **Payments** (1 tool): Record payments
- **Referrals** (1 tool): Validate referral codes
### Status Tool
| Tool | Description |
|------|-------------|
| `gameball-status` | Shows subsystem health, API key configuration, cache location, and sync status |
## How It Works
### Startup
1. Fetches the latest commit SHA from GitHub (single API call)
2. Loads both subsystems **in parallel**:
- **Docs subsystem**: Fetches `.mdx` files and `docs.json`, builds MiniSearch index
- **Integration subsystem**: Fetches `openapi.json` independently (gzip-cached)
3. Parses the OpenAPI spec into endpoint definitions (shared by both subsystems)
4. Registers all tools and connects via stdio
Progress is reported to stderr during loading:
```
Checking for updates...
Loading...
Ready ā 79 tools
```
### Documentation Subsystem
- **GitHub Fetching**: Fetches Gameball docs from GitHub with batched requests
- **Commit-SHA Cache**: Validates cache with 1 API call, re-fetches only when docs change
- **Full-Text Indexing**: MiniSearch with fuzzy matching and heading-based chunking
- **Stale-Cache Fallback**: Uses cached docs if GitHub is unreachable
### Integration Subsystem
- **Independent OpenAPI Fetch**: Fetches only `openapi.json` (not the full docs repo)
- **Gzip Cache**: Stores the OpenAPI spec compressed with atomic writes
- **Auto-Generated Tools**: All 71 tools generated from OpenAPI spec at startup
- **Smart Adaptive Verbosity**: Intelligent descriptions save 78% tokens (~7,000 tokens)
- **HTTP Client**: Wraps Gameball API v4.0 with automatic auth header injection
### Graceful Failure
All GitHub fetches have a **10-second timeout**. If GitHub is unavailable:
- With cache: Falls back to stale cached data
- Without cache (cold start): Server starts with 0 tools + status tool
- The `gameball-status` tool always registers and shows the error state
**First run**: ~2-3 seconds (fetches from GitHub)
**Subsequent runs**: ~200-500ms (validates cache with 1 API call)
## Architecture
```
gameball-integrations/
āāā src/
ā āāā index.ts # Entry point (stdio transport)
ā āāā server.ts # Server creation (parallel init, graceful failure)
ā āāā status-tool.ts # gameball-status tool
ā āāā docs/ # Documentation subsystem (7 tools)
ā ā āāā index.ts # Init + tool registration
ā ā āāā fetcher.ts # GitHub fetching + SHA-based cache
ā ā āāā doc-indexer.ts # MiniSearch indexing + chunking
ā ā āāā mdx-parser.ts # MDX ā plain text
ā ā āāā codegen.ts # Multi-language code generation
ā ā āāā types.ts # Doc-specific types
ā ā āāā tools/ # 7 documentation tools
ā āāā integration/ # API integration subsystem (71 tools)
ā ā āāā index.ts # Client creation + tool registration
ā ā āāā openapi-fetcher.ts # Independent openapi.json fetch + gzip cache
ā ā āāā http-client.ts # GameballClient (auth, error formatting)
ā ā āāā generator.ts # Auto-generates 71 tools from OpenAPI
ā āāā shared/ # Common utilities
ā āāā github-cache.ts # GitHub fetch, SHA check, cache dir, timeout
ā āāā types.ts # Shared type definitions (ApiEndpoint, etc.)
ā āāā openapi-parser.ts # OpenAPI JSON ā ApiEndpoint map
```
## Cache Layout
```
~/.cache/gameball-integrations/
āāā manifest.json # Docs cache manifest (commitSha, file list)
āāā [__-delimited .mdx files] # Cached documentation pages
āāā openapi-manifest.json # OpenAPI cache manifest (commitSha, timestamp)
āāā openapi.json.gz # Gzip-compressed OpenAPI spec
```
## Usage Examples
### Learning about Gameball
```
Use docs-lookup-topic to learn about "customer referrals"
Use docs-get-doc to read "tutorials-new/referral-setup"
Use docs-generate-code-example for JavaScript customer creation
```
### Making API Calls
```
Use create-customer to register a new customer
Use cashback-transaction to reward points
Use query-transactions to check transaction history
```
### Checking Server Health
```
Use gameball-status to see subsystem status, config, and cache info
```
## Development
```bash
# Install dependencies
npm install
# Run in development mode (with auto-reload)
npm run dev
# Build for production
npm run build
# Run built version
npm start
```
## Requirements
- Node.js >= 20
- For integration tools: Valid Gameball API credentials
## License
MIT
## Links
- [Gameball Documentation](https://docs.gameball.co)
- [Gameball API Reference](https://api.gameball.co)
- [MCP Protocol](https://modelcontextprotocol.io)
## Support
For issues or questions:
- Documentation tools: Check cache at `~/.cache/gameball-integrations/`
- Integration tools: Verify API credentials in environment variables
- GitHub Issues: [Report bugs or request features]
TDQS
Scored across 40 tools
Many tools target distinct resources (balance, tier progress, referrals, activities), but overlaps exist: getCustomer vs getCustomerDetails, removeCustomerTags vs removeCustomerTag, and the docs-lookup-topic/search-docs and get-doc/get-tutorial pairs could confuse agents.
The tool set mixes two conventions: docs tools use hyphenated lowercase with a docs- prefix (e.g., docs-lookup-topic), while API tools use camelCase verbs (e.g., createCustomer, getCustomer). Pluralization is also inconsistent (removeCustomerTags vs removeCustomerTag).
40 tools is excessive for a single server, especially with ~15 getCustomer* variations. This makes selection harder and suggests tools could be consolidated into parameterized endpoints.
The server covers a broad range of Gameball operations (customers, orders, campaigns, referrals), but lacks obvious operations like updating a customer or fetching a single order. Documentation tools are comprehensive, but the API surface is not fully CRUD-complete.