set-and-signal
Optional OIDC provider for sign-in and MCP OAuth, allowing users to authenticate and authorize MCP clients via Apple.
Optional OIDC provider for sign-in and MCP OAuth, allowing users to authenticate and authorize MCP clients via GitHub.
Optional OIDC provider for sign-in and MCP OAuth, allowing users to authenticate and authorize MCP clients via Google.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@set-and-signalPreview this week's program changes before I apply them"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Set & Signal ๐๏ธ ยท Make the next set obvious
Set & Signal is a self-hostable workout planner and training log for planning sessions, recording sets, reviewing history, and asking an AI assistant about training data. The product ships as a React/Vite web app embedded in a Go server, with passkeys/OIDC sign-in, Convex-backed training records, SQLite for identity and operational state, and an MCP endpoint for assistant clients.
A session in the real world: plan a push day, log the working sets as you go, then ask the assistant what to train next. Your history, prescription, and account boundary stay in the same self-hosted system.
The project is designed for a single deployment you control. It includes an exercise catalogue, progression and prescription helpers, workout history, bodyweight tracking, reminders, push notifications, localization, and a read/write MCP surface protected by the same account boundary as the web app.
Run locally
Requires Go 1.27+, Node.js 24+, pnpm 12+, PostgreSQL-compatible Convex
deployment, and an OAuth or passkey configuration. The API refuses to start
without CONVEX_URL; the full training setup and storage rules are in
docs/convex.md.
Start the API and web app together, then open https://set-and-signal.localhost:
pnpm install --frozen-lockfile
pnpm devpnpm dev runs dev:api and dev:web in parallel. The API reads CONVEX_URL from
web/.env.local and stores data in ./data.
Both run through Portless (a dev
dependency): the API at https://api.set-and-signal.localhost, the web app at
https://set-and-signal.localhost. The first run may ask for sudo to bind port 443
and trust a local certificate. Vite proxies /api, /oauth, /.well-known, and
/mcp to the API, so OAuth callbacks, session cookies, and the local MCP endpoint
all use the web origin. Passkeys registered for localhost do not carry over to the
new hostname.
For a fresh development deployment, run pnpm exec convex dev from web and
follow the setup guide to configure AUTH_ISSUER and AUTH_JWKS. Keep the
generated web/.env.local, signing keys, and any provider credentials out of
Git.
Related MCP server: tally-workout-mcp
Verify
go test -race ./...
go vet ./...
(cd .railway && go test ./... && go vet ./...)The service is licensed under the GNU AGPL v3 or later. See SECURITY.md for vulnerability reports.
Architecture
flowchart LR
Browser[React/Vite web app] --> API[Go HTTP API]
Browser --> Convex[Convex training functions]
API --> SQLite[(SQLite identity + operations)]
API --> Convex
API --> MCP[MCP Streamable HTTP]
API --> Auth[Passkeys / OIDC]
API --> Push[Web Push + reminders]The Go composition root is cmd/opengym-api. HTTP and MCP protocol concerns
live in internal/httpapi; training state, analytics, scheduling, and
progression live in internal/training; SQLite access and migrations live in
internal/store. The frontend follows the app โ features โ domain โ shared
direction described in docs/architecture.md. Edit
exercise content in web/catalog; generated instruction files are rebuilt by
the web scripts.
Configuration essentials
.env.example documents the complete runtime surface. The settings most
people need are:
Variable | Why it matters |
| Required hosted training deployment. |
| Persistent SQLite, session, push, and signing-key storage. |
| Browser origin and OAuth/MCP issuer; use a reachable HTTPS URL in production. |
| WebAuthn relying-party identity. |
| Optional OIDC providers for sign-in and MCP OAuth. |
| Optional AI workout planning. |
Further documentation
Architecture โ dependency direction and build layout.
Convex setup and storage โ hosted training ownership, offline queues, keys, and current format requirements.
Data model โ storage ownership and current contracts.
Railway deployment โ infrastructure configuration.
Status and privacy
The repository is an active, self-hosted application with hosted
Convex training storage. Training records are account-scoped, but a deployment's
operator controls the API, Convex project, and persistent volume. Review
SECURITY.md and configure access controls before exposing an instance to
other users.
This server cannot be deployed
Maintenance
Related MCP Connectors
- MyoAmigoOAuthcom.myoamigo
Agent-first strength-training platform across iOS, Web & MCP: read & write workouts, PRs & plans.
Remote MCP server for training, nutrition, wellness, and performance data with OAuth 2.0.
Manage clients, plans, sessions, habits, and billing on Trainzilla via one-click OAuth.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceConnect Pelaris to any MCP-compatible AI assistant for personalised fitness coaching. Plan training programs, log workouts, track benchmarks, manage goals, and get data-driven coaching insights. Supports science-based methodologies including 5/3/1, Pfitzinger, polarised training, and more. OAuth 2.0 authentication with Streamable HTTP transport. Documentation: https://pelaris.io/integrations Web-
- AlicenseNot gradedqualityDmaintenanceStrength-training app Claude can write to: reads real workout history (planned vs actual) and writes planned workouts back into the Tally iOS app. First-party hosted remote MCP server secured with OAuth 2.1 (PKCE + dynamic client registration).MIT
- FlicenseNot gradedqualityBmaintenanceEnables agents to track workouts, body metrics, and training stats for registered users through a JSON-RPC MCP endpoint, with scoped agent permissions and a web dashboard.-
- FlicenseNot gradedqualityBmaintenanceEnables logging workouts, sets, routines, food, water, and macros through natural-language chat in any MCP client, with OAuth-based secure access and timezone-aware daily tracking.-