Setup
Setup
Prerequisites
| What you need |
How to get it |
| Access key |
Contact your account manager. The key is issued to your integration and is used as a Bearer token. |
| Gateway base URL |
Provided as part of your integration, together with the key. |
| An MCP client |
Any client that supports MCP over HTTP — Claude Code, Cursor, and others. Not required if you only want to call the endpoint directly with curl. |
Treat the key as a secret
The access key does not expire. Store it the same way you store your Groove security key: keep it out of source control, out of shared documents, and out of client-side code. If it leaks, contact your account manager so it can be rotated.
Endpoint
POST https://<sinatra-gateway>/mcp
| Header |
Value |
Authorization |
Bearer <your-access-key> |
Content-Type |
application/json |
The body is a standard JSON-RPC 2.0 message. Responses are returned as application/json.
Note
The endpoint is stateless — no session handshake is needed and no session header has to be echoed back. You can call tools/list or tools/call straight away. Server-to-client streaming (SSE) is disabled; every call is a plain request/response.
Option 1 — Connect an AI client
This is the normal way to use the MCP. Configure it once and your assistant handles the protocol for you.
Claude Code
claude mcp add --transport http groove https://<sinatra-gateway>/mcp \
--header "Authorization: Bearer <your-access-key>"
Cursor and other MCP clients
Add the server to your client’s mcp.json:
{
"mcpServers": {
"groove": {
"url": "https://<sinatra-gateway>/mcp",
"headers": {
"Authorization": "Bearer <your-access-key>"
}
}
}
}
Once connected, your client lists 9 tools (see Available Tools). You can then simply ask, for example:
- “Show me the spec for the Wager endpoint.”
- “Sign this request with key
X: request=getaccount&…”
- “Is this
X-Groove-Signature valid for this request?”
- “Generate a Python snippet for the Result endpoint.”
- “Generate a full Go project for the Groove integration.”
Verify the connection
Ask your assistant to call get_server_info. A working connection reports the server name (groove-mcp), its version, and the number of endpoints it has loaded.
Option 2 — Call it directly over HTTP
The MCP is an ordinary HTTPS API, so you can use it from curl, Postman, or your own code — useful for a quick smoke test or for scripting signature checks in CI.
curl --location 'https://<sinatra-gateway>/mcp' \
--header 'Authorization: Bearer <your-access-key>' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
Every tool is invoked with method: "tools/call", the tool name, and its arguments:
curl --location 'https://<sinatra-gateway>/mcp' \
--header 'Authorization: Bearer <your-access-key>' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sign_request",
"arguments": {
"integration": "regular",
"query": "request=getaccount&gamesessionid=123_jdhdujdk&accountid=111&device=desktop&apiversion=1.2",
"key": "test_key"
}
}
}'
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "X-Groove-Signature: be426d042cd71743970779cd6ee7881d71d1f0eb769cbe14a0081c29c8ef2a09"
}
],
"isError": false
}
}
Troubleshooting
| Symptom |
Cause / fix |
401 Unauthorized |
The Authorization header is missing, malformed, or the key is no longer valid. Check the header is exactly Bearer <key>; if it still fails, contact your account manager. |
400 Bad Request — Invalid content type |
Add Content-Type: application/json. |
404 Not Found |
The MCP is not enabled on that gateway, or the base URL is wrong. Confirm the base URL for your environment with your account manager. |
413 Payload Too Large |
The request body exceeds the 4 MiB limit. Tool calls are small — this normally means the wrong payload was sent. |
| Client connects but lists no tools |
The client is not using the HTTP transport, or the Authorization header is not being sent. |
The Groove MCP server exposes 9 tools. All of them are read-only — they answer from the embedded documentation snapshot and never call a backend or change any state.
Every tool is called with method: "tools/call" — see Setup for the request format.
The integration argument
Several tools take an integration argument. For the integration documented on this site, always pass "regular".
Discovery
List all available MCP tools with their descriptions and input schemas.
Arguments: none.
Returns: total_tools and a tools array, each entry with name, description and input_schema.
get_server_info
Report this MCP server’s name, version, and how many endpoints it serves. Useful as a connectivity check.
Arguments: none.
Returns: the server identity — groove-mcp, its version, and the number of endpoints loaded.
Documentation lookup
list_endpoints
List every documented endpoint, grouped by category.
| Argument |
Required |
Values |
Description |
integration |
No |
regular |
Restrict the listing to this integration. |
Returns: a grouped listing — endpoint name, HTTP method and one-line summary per category.
37 endpoint(s):
[regular] Transaction API
- GetAccount (GET) — Validate the player session and return account details.
- GetBalance (GET) — Return the player's current balance.
...
get_endpoint
Return the full spec — parameters, responses, error codes, signature and authentication — for one endpoint.
| Argument |
Required |
Values |
Description |
integration |
Yes |
regular |
The integration documented on this site. |
name |
Yes |
e.g. Wager, GetBalance |
Endpoint name. |
Returns: the endpoint object, including name, category, summary, method, path, auth, params, responses, errorCodes, signature, and the sourceUrl of the documentation page it was taken from.
Example call:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_endpoint",
"arguments": { "integration": "regular", "name": "Wager" }
}
}
search_docs
Search endpoints by name, summary or category.
| Argument |
Required |
Values |
Description |
query |
Yes |
free text |
e.g. balance, free spin, rollback. |
integration |
No |
regular |
Restrict the search to this integration. |
Returns: a match list of [integration / category] Name — Summary.
Signatures
sign_request
Compute the X-Groove-Signature for a request — HMAC-SHA256 over the sorted parameter values, hex-encoded.
| Argument |
Required |
Description |
integration |
Yes |
regular. |
query |
Yes |
The raw query string — everything after the ?. |
key |
Yes |
Your Groove security key. |
Returns: the ready-to-use header line.
Example call:
{
"name": "sign_request",
"arguments": {
"integration": "regular",
"query": "request=getaccount&gamesessionid=123_jdhdujdk&accountid=111&device=desktop&apiversion=1.2",
"key": "test_key"
}
}
Result:
X-Groove-Signature: be426d042cd71743970779cd6ee7881d71d1f0eb769cbe14a0081c29c8ef2a09
verify_signature
Check whether a signature is valid for a request — the same check Groove performs. Use it to debug a rejected request.
| Argument |
Required |
Description |
integration |
Yes |
regular. |
query |
Yes |
The raw query string. |
key |
Yes |
Your Groove security key. |
signature |
Yes |
The hex signature to check. |
Returns: valid, or the failure the caller would have seen — invalid signature (code 1001).
See Signature Validation for how the signature is built.
Code generation
generate_snippet
Return a runnable code example for one endpoint, with the signing or verification step shown explicitly rather than hidden in a helper.
| Argument |
Required |
Values |
Description |
integration |
Yes |
regular |
The integration documented on this site. |
name |
Yes |
e.g. Wager |
Endpoint name. |
language |
Yes |
go | java | python | typescript | curl |
Output language. |
signed |
No |
true (default) | false |
Include the X-Groove-Signature step for Transaction API calls. Set to false if your account does not use signature validation. |
Returns: the snippet as text.
generate_integration
Generate a ready-to-run integration blueprint: the files of a startable project — a real /groove entry point, the documented success responses and error catalogue, and one wallet seam per operation family for you to fill in, routed per brand.
It emits the full core transaction flow; individual endpoints cannot be selected.
| Argument |
Required |
Values |
Description |
integration |
Yes |
regular |
The integration documented on this site. |
language |
Yes |
go | java | python | typescript |
Target language. |
Returns: a JSON project — integration, language, optional notes, and a files array:
{
"integration": "regular",
"language": "go",
"files": [
{ "path": "go.mod", "action": "overwrite", "content": "..." },
{ "path": "main.go", "action": "overwrite", "content": "..." },
{ "path": "app/wallet.go", "action": "create-if-absent", "content": "..." }
]
}
The action tells you how to write each file:
| Action |
Meaning |
overwrite |
Regenerated on every call — safe to replace, do not edit by hand. |
create-if-absent |
Your wallet seam. Written once and never clobbered, so your edits survive regeneration. |