aimharder-mcp 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# aimharder-mcp
|
|
2
2
|
|
|
3
|
-
Ask about your AimHarder classes, workouts, bookings and activity from
|
|
4
|
-
|
|
5
|
-
**Release status:** `aimharder-mcp@0.1.0` is not on npm yet. The `npx` example below will work after publication. A [local package archive has been tested](https://github.com/rudeayelo/aimharder-mcp/blob/main/docs/validation.md).
|
|
3
|
+
Ask about your AimHarder classes, workouts, bookings and activity from an AI client. This is a local, read-only [MCP server](https://modelcontextprotocol.io/) and an independent project, neither affiliated with nor endorsed by AimHarder.
|
|
6
4
|
|
|
7
5
|
**Data limits:** Live checks used one account at one location (9NBC). Other gyms may differ. Workout and booking views can be incomplete, so an empty result may not mean there is nothing to show. [Details](docs/tools.md#coverage-and-interpretation)
|
|
8
6
|
|
|
@@ -17,7 +15,7 @@ Ask about your AimHarder classes, workouts, bookings and activity from a desktop
|
|
|
17
15
|
"mcpServers": {
|
|
18
16
|
"aimharder": {
|
|
19
17
|
"command": "npx",
|
|
20
|
-
"args": ["--yes", "aimharder-mcp@0.1.
|
|
18
|
+
"args": ["--yes", "aimharder-mcp@0.1.1"]
|
|
21
19
|
}
|
|
22
20
|
}
|
|
23
21
|
}
|
|
@@ -25,14 +23,15 @@ Ask about your AimHarder classes, workouts, bookings and activity from a desktop
|
|
|
25
23
|
|
|
26
24
|
4. Ask your client an AimHarder question, such as “What is tomorrow's WOD?” The first valid tool call signs in. See the guide for your client below for its configuration format and credential options.
|
|
27
25
|
|
|
28
|
-
## Desktop clients
|
|
26
|
+
## Desktop and CLI clients
|
|
29
27
|
|
|
30
28
|
- [ChatGPT desktop](docs/clients/chatgpt-desktop.md)
|
|
29
|
+
- [Codex](docs/clients/codex.md)
|
|
31
30
|
- [Claude Desktop](docs/clients/claude-desktop.md)
|
|
32
31
|
- [Hermes](docs/clients/hermes.md)
|
|
33
32
|
- [OpenClaw](docs/clients/openclaw.md)
|
|
34
33
|
|
|
35
|
-
Hermes
|
|
34
|
+
Hermes and Codex CLI have called the account tool through the published package. The ChatGPT desktop STDIO form has been observed; package connections in ChatGPT desktop, Claude Desktop and OpenClaw have not been verified. Mobile apps are outside the current setup guides.
|
|
36
35
|
|
|
37
36
|
## Tools
|
|
38
37
|
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Use this guide if your ChatGPT desktop app offers **Connect to a custom MCP → Type: STDIO**. The user observed this form on 2026-09-24; a connection with this package has **not been tested**. If the local STDIO option is absent, see your app's [remote MCP documentation](https://developers.openai.com/plugins/deploy/connect-chatgpt).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
First set up [Node 24+ and your account environment](../configuration.md).
|
|
6
6
|
|
|
7
7
|
## Add the server
|
|
8
8
|
|
|
9
9
|
1. Open **Settings → Plugins → MCPs → Add server**. Set **Name** to `aimharder` and **Type** to **STDIO**.
|
|
10
10
|
2. Set **Command to launch** to `npx`.
|
|
11
|
-
3. Add two separate **Arguments**: `--yes` and `aimharder-mcp@0.1.
|
|
11
|
+
3. Add two separate **Arguments**: `--yes` and `aimharder-mcp@0.1.1`, in that order.
|
|
12
12
|
4. Under **Environment variable passthrough**, add the names `AIMHARDER_USERNAME` and `AIMHARDER_PASSWORD`. The app must already receive their values. Also pass `AIMHARDER_GYM_TIME_ZONES` or `AIMHARDER_DEFAULT_GYM` if configured. Keep credential values out of the form's **Environment variables** fields.
|
|
13
13
|
5. Leave **Working directory** empty unless your desktop build requires one. Save the server.
|
|
14
14
|
|
|
@@ -16,4 +16,4 @@ If the app cannot receive those variables, use the [private-file setup](../confi
|
|
|
16
16
|
|
|
17
17
|
## Check the connection
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Check that the [tools](../tools.md) appear and ask an AimHarder question. Tool discovery does not authenticate; the first valid call does. `get_account_context` with `{}` is an optional way to check the gym and assumed or configured zone. The package connection remains unverified in this client.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Connect Claude Desktop
|
|
2
2
|
|
|
3
|
-
Claude Desktop configures local stdio servers in `mcpServers` JSON. Its [official guide](https://modelcontextprotocol.io/docs/develop/connect-local-servers) uses `npx`. This package has **not been tested** in Claude Desktop
|
|
3
|
+
Claude Desktop configures local stdio servers in `mcpServers` JSON. Its [official guide](https://modelcontextprotocol.io/docs/develop/connect-local-servers) uses `npx`. This package has **not been tested** in Claude Desktop.
|
|
4
4
|
|
|
5
5
|
## Run the published package with `npx`
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@ Claude Desktop configures local stdio servers in `mcpServers` JSON. Its [officia
|
|
|
13
13
|
"mcpServers": {
|
|
14
14
|
"aimharder": {
|
|
15
15
|
"command": "npx",
|
|
16
|
-
"args": ["--yes", "aimharder-mcp@0.1.
|
|
16
|
+
"args": ["--yes", "aimharder-mcp@0.1.1"]
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Connect Codex CLI
|
|
2
|
+
|
|
3
|
+
Codex configures local stdio servers in `~/.codex/config.toml`. Its [MCP guide](https://developers.openai.com/codex/mcp) describes the configuration shared by the CLI and IDE extension. The published package authenticated a read-only account query in Codex CLI; see [validation](https://github.com/rudeayelo/aimharder-mcp/blob/main/docs/validation.md). A connection in the Codex desktop app has not been separately checked.
|
|
4
|
+
|
|
5
|
+
Install [Node 24+ and configure credentials](../configuration.md). Keep secret values out of `config.toml`.
|
|
6
|
+
|
|
7
|
+
## Add the pinned package
|
|
8
|
+
|
|
9
|
+
If Codex receives the required environment variables from your local environment, add:
|
|
10
|
+
|
|
11
|
+
```toml
|
|
12
|
+
[mcp_servers.aimharder]
|
|
13
|
+
command = "npx"
|
|
14
|
+
args = ["--yes", "aimharder-mcp@0.1.1"]
|
|
15
|
+
env_vars = ["AIMHARDER_USERNAME", "AIMHARDER_PASSWORD"]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
You can instead run `codex mcp add aimharder -- npx --yes aimharder-mcp@0.1.1`, then add the `env_vars` line to the created table. Also forward `AIMHARDER_GYM_TIME_ZONES` or `AIMHARDER_DEFAULT_GYM` if configured. Restart Codex after editing the configuration.
|
|
19
|
+
|
|
20
|
+
## Private-file option
|
|
21
|
+
|
|
22
|
+
If Codex does not receive those variables, use a [private environment file](../configuration.md#private-file-and-local-installation). This still runs the pinned package through `npx` while Node loads the private file:
|
|
23
|
+
|
|
24
|
+
```toml
|
|
25
|
+
[mcp_servers.aimharder]
|
|
26
|
+
command = "/absolute/path/to/node"
|
|
27
|
+
args = [
|
|
28
|
+
"--env-file=/absolute/path/to/private.env",
|
|
29
|
+
"/absolute/path/to/npm/bin/npx-cli.js",
|
|
30
|
+
"--yes",
|
|
31
|
+
"--prefix=/absolute/path/to/empty-npx-directory",
|
|
32
|
+
"aimharder-mcp@0.1.1",
|
|
33
|
+
]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Create the empty directory first. The prefix makes `npx` resolve the public version even when Codex starts inside a checkout of `aimharder-mcp`. Find the npm CLI bundled with your Node installation; the path is installation-specific. Keep both the private file and empty directory outside the repository.
|
|
37
|
+
|
|
38
|
+
Run `codex mcp get aimharder` to inspect the saved command. In a new Codex session, call `get_account_context` with `{}` to authenticate and inspect the gym and zone. Tool listing alone does not authenticate. The server is local and read-only.
|
package/docs/clients/hermes.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Connect Hermes
|
|
2
2
|
|
|
3
|
-
Hermes configures local stdio servers in `mcp_servers`.
|
|
3
|
+
Hermes configures local stdio servers in `mcp_servers`. The published package connected, exposed six tools and authenticated an account query in Hermes; a prior local archive answered a future-WOD question. See [validation](https://github.com/rudeayelo/aimharder-mcp/blob/main/docs/validation.md).
|
|
4
4
|
|
|
5
5
|
Set up [Node 24+ and credentials](../configuration.md). Hermes forwards configured `env` values, but does not pass every process variable to child servers. `${VAR}` resolves from the active profile's secrets or environment. See the [Hermes guide](https://github.com/NousResearch/hermes-agent/blob/main/website/docs/user-guide/features/mcp.md) and [config reference](https://github.com/NousResearch/hermes-agent/blob/main/website/docs/reference/mcp-config-reference.md).
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ mcp_servers:
|
|
|
14
14
|
command: npx
|
|
15
15
|
args:
|
|
16
16
|
- --yes
|
|
17
|
-
- aimharder-mcp@0.1.
|
|
17
|
+
- aimharder-mcp@0.1.1
|
|
18
18
|
env:
|
|
19
19
|
AIMHARDER_USERNAME: "${AIMHARDER_USERNAME}"
|
|
20
20
|
AIMHARDER_PASSWORD: "${AIMHARDER_PASSWORD}"
|
|
@@ -25,8 +25,21 @@ mcp_servers:
|
|
|
25
25
|
|
|
26
26
|
Keep literal credentials out of YAML and check that the references resolve. If the assumed zone is wrong, confirm the gym zone and add `AIMHARDER_GYM_TIME_ZONES: "${AIMHARDER_GYM_TIME_ZONES}"` under `env`. Add `AIMHARDER_DEFAULT_GYM` the same way for multiple gyms. Define optional variables before referencing them; unresolved references can cause errors.
|
|
27
27
|
|
|
28
|
+
For a private environment file instead of profile variables, run the `npx` CLI under Node's `--env-file` option. Point `command` to your absolute Node 24+ executable and use these arguments:
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
args:
|
|
32
|
+
- --env-file=/absolute/path/to/private.env
|
|
33
|
+
- /absolute/path/to/npm/bin/npx-cli.js
|
|
34
|
+
- --yes
|
|
35
|
+
- --prefix=/absolute/path/to/empty-npx-directory
|
|
36
|
+
- aimharder-mcp@0.1.1
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Create the empty directory first. The prefix prevents `npx` from mistaking a checkout of this same package for the published executable. The private file and paths stay outside the repository. This form was used for the published-package Hermes check.
|
|
40
|
+
|
|
28
41
|
## Verify and reload
|
|
29
42
|
|
|
30
43
|
Run `hermes mcp test aimharder`, or `hermes -p <profile> mcp test aimharder` for a named profile. This checks tool discovery, not AimHarder authentication. Run `/reload-mcp` and ask a question; the first valid tool call authenticates. `get_account_context` with `{}` is an optional gym check.
|
|
31
44
|
|
|
32
|
-
`/reload-mcp` restarts the server
|
|
45
|
+
`/reload-mcp` restarts the server. Change the pinned version before reloading for a later release.
|
package/docs/clients/openclaw.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Connect OpenClaw
|
|
2
2
|
|
|
3
|
-
OpenClaw stores local stdio servers under `mcp.servers`; see its [MCP guide](https://docs.openclaw.ai/cli/mcp/registry) and [environment references](https://docs.openclaw.ai/gateway/config-secrets-env). This package has **not been tested** in OpenClaw
|
|
3
|
+
OpenClaw stores local stdio servers under `mcp.servers`; see its [MCP guide](https://docs.openclaw.ai/cli/mcp/registry) and [environment references](https://docs.openclaw.ai/gateway/config-secrets-env). This package has **not been tested** in OpenClaw.
|
|
4
4
|
|
|
5
5
|
Install Node 24+ and make `AIMHARDER_USERNAME` and `AIMHARDER_PASSWORD` available through OpenClaw's environment or secrets source. Keep literal values out of commands and saved definitions. See [configuration](../configuration.md).
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ Set `mcp.servers.aimharder` to this definition:
|
|
|
11
11
|
```json
|
|
12
12
|
{
|
|
13
13
|
"command": "npx",
|
|
14
|
-
"args": ["--yes", "aimharder-mcp@0.1.
|
|
14
|
+
"args": ["--yes", "aimharder-mcp@0.1.1"],
|
|
15
15
|
"env": {
|
|
16
16
|
"AIMHARDER_USERNAME": "${AIMHARDER_USERNAME}",
|
|
17
17
|
"AIMHARDER_PASSWORD": "${AIMHARDER_PASSWORD}"
|
|
@@ -22,7 +22,7 @@ Set `mcp.servers.aimharder` to this definition:
|
|
|
22
22
|
Save the definition with the CLI:
|
|
23
23
|
|
|
24
24
|
```sh
|
|
25
|
-
openclaw mcp set aimharder '{"command":"npx","args":["--yes","aimharder-mcp@0.1.
|
|
25
|
+
openclaw mcp set aimharder '{"command":"npx","args":["--yes","aimharder-mcp@0.1.1"],"env":{"AIMHARDER_USERNAME":"${AIMHARDER_USERNAME}","AIMHARDER_PASSWORD":"${AIMHARDER_PASSWORD}"}}'
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
Keep the outer single quotes: they prevent the shell from inserting secret values into saved config. You can also edit `mcp.servers.aimharder` directly. If `Europe/Madrid` is wrong, confirm the gym zone, define `AIMHARDER_GYM_TIME_ZONES`, and add `"AIMHARDER_GYM_TIME_ZONES": "${AIMHARDER_GYM_TIME_ZONES}"` under `env`. Add a default gym only if configured.
|
package/docs/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Configure a local AimHarder MCP server
|
|
2
2
|
|
|
3
|
-
Your MCP client runs the server locally over stdio, using one AimHarder account per process. Install Node.js 24 or newer.
|
|
3
|
+
Your MCP client runs the server locally over stdio, using one AimHarder account per process. Install Node.js 24 or newer. The current verified npm version is `aimharder-mcp@0.1.1`.
|
|
4
4
|
|
|
5
5
|
## Environment variables
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ Your MCP client runs the server locally over stdio, using one AimHarder account
|
|
|
11
11
|
| `AIMHARDER_GYM_TIME_ZONES` | Optional JSON object from discovered gym IDs to IANA zones, such as `{"sample-gym":"Atlantic/Canary"}`. Unmapped gyms use an explicitly assumed `Europe/Madrid` zone. Configure the actual zone when the assumption is wrong. |
|
|
12
12
|
| `AIMHARDER_DEFAULT_GYM` | Optional for one accessible gym; required when the account has several. Use a discovered gym ID, not a URL. |
|
|
13
13
|
|
|
14
|
-
Supply credentials through the client process environment or a secrets manager; forwarding rules differ by [client](../README.md#desktop-clients). Keep values out of shared config, issues and logs. The server holds its session in memory.
|
|
14
|
+
Supply credentials through the client process environment or a secrets manager; forwarding rules differ by [client](../README.md#desktop-and-cli-clients). Keep values out of shared config, issues and logs. The server holds its session in memory.
|
|
15
15
|
|
|
16
16
|
## Discover your gym and check its time zone
|
|
17
17
|
|
|
@@ -23,11 +23,11 @@ Date inputs use `YYYY-MM-DD` in the reported gym zone. An assumed zone can make
|
|
|
23
23
|
|
|
24
24
|
## Version-pinned startup
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
A client that forwards the required variables can start the pinned release with:
|
|
27
27
|
|
|
28
28
|
```text
|
|
29
29
|
command: npx
|
|
30
|
-
arguments: --yes, aimharder-mcp@0.1.
|
|
30
|
+
arguments: --yes, aimharder-mcp@0.1.1
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
If `npx` cannot start, check the app's access to Node and npm; GUI apps may have a different `PATH` from your terminal. The [private-file setup](#private-file-and-local-installation) runs Node directly. The server queries AimHarder on demand, without a persistent cache.
|
|
@@ -43,10 +43,10 @@ AIMHARDER_PASSWORD=your-account-password
|
|
|
43
43
|
|
|
44
44
|
If needed, add `AIMHARDER_GYM_TIME_ZONES={"sample-gym":"Atlantic/Canary"}`, replacing the ID and zone. Restrict file and directory access with `chmod 600 /absolute/path/to/private.env` and `chmod 700 /absolute/path/to/private-directory`, or use a secrets-manager mount. The server does **not** load the file automatically.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Alternatively, install the exact package into a private local directory:
|
|
47
47
|
|
|
48
48
|
```sh
|
|
49
|
-
npm install --prefix /absolute/path/to/installation --ignore-scripts --omit=dev aimharder-mcp@0.1.
|
|
49
|
+
npm install --prefix /absolute/path/to/installation --ignore-scripts --omit=dev aimharder-mcp@0.1.1
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
Point a stdio client at Node 24 or newer with these arguments, in this order:
|