Steady MCP (local)
This is a local MCP server that submits Steady check-ins by driving Steady’s web form (there is no official Steady API).
It’s built for the workflow:
You tell the AI: team + check-in fields (previous / next / blockers) → AI calls the MCP tool → Steady check-in is submitted.
What this supports
Email + password login (two-step flow from
/signin) viasteady_loginCookie-based auth via
steady_set_cookies(fallback for non-standard auth flows)Team discovery via
steady_list_teamsSubmitting a check-in for one team via
steady_submit_checkin
How it works (important)
Steady rotates the _sthr_session cookie when you load the daily edit page (/check-ins/YYYY-MM-DD/edit).
So this server uses a curl cookie jar (cookiejar.txt) to preserve the updated session cookie between the GET and POST.
Requirements
Node.js 18+
Cursor (or another MCP client) with support for running local MCP servers over stdio
Access to Steady web app (
https://app.steady.space)
Install
Configure Cursor (MCP)
Add a server entry to your Cursor MCP config.
Where is mcp.json?
Common locations:
macOS / Linux:
~/.cursor/mcp.jsonWindows:
%USERPROFILE%\\.cursor\\mcp.json
If you don’t see it, use Cursor’s UI settings for MCP servers (recommended), or search for mcp.json on your machine.
Quickstart: macOS (recommended)
Install Node.js 18+
If you use Homebrew:
Install dependencies
Add (example below)
Restart Cursor (quit + reopen)
In Cursor, run:
steady_loginsteady_submit_checkin
Quickstart: Windows
Install Node.js 18+
If you use
winget:
Install dependencies
Add
Restart Cursor (fully quit + reopen)
In Cursor, run:
steady_loginsteady_submit_checkin
Example mcp.json snippet
Replace
<ABS_PATH_TO_REPO>and your email.
Windows path tip (important)
In JSON, Windows backslashes require escaping. Easiest option: use forward slashes in the args path:
Security note
STEADY_PASSWORDinmcp.jsonis the simplest setup, but it’s not ideal for security.Prefer
STEADY_PASSWORD_COMMAND(password retrieved at runtime) whenever possible.
Credentials / Secrets (cross-platform)
The server reads credentials from environment variables provided by your MCP client.
Option A (simple): plaintext env password
STEADY_EMAILSTEADY_PASSWORD
Option B (recommended): password command
STEADY_EMAILSTEADY_PASSWORD_COMMAND— command that prints the password to stdout (no prompts)
Examples:
macOS Keychain (recommended on macOS)
Store once:
In MCP env:
STEADY_PASSWORD_COMMAND=security find-generic-password -w -s steady-mcp -a you@company.com
Windows: use a password manager CLI (e.g. 1Password CLI / Bitwarden CLI) or a small local script that prints the password.
Any OS: use your password manager’s CLI, or a small script you keep outside git.
Option C (macOS-only fallback): Keychain lookup without a command
If you have a Keychain entry, the server can read it automatically on macOS:
STEADY_EMAIL=you@company.comoptionally
STEADY_KEYCHAIN_SERVICE=steady-mcpoptionally
STEADY_KEYCHAIN_ACCOUNT=you@company.com
Authentication options
1) Login automation (email → password)
Use:
steady_login
This will log in and write:
cookies.txt(Cookie header string)cookiejar.txt(curl jar; used internally to handle session rotation)
2) Cookie-based auth (fallback)
If login automation doesn’t work for your Steady account, you can set cookies from your browser:
In Steady (browser): DevTools → Application/Storage → Cookies →
https://app.steady.spaceCopy these cookies:
_sthr_sessionremember_user_token(if present)
Build a Cookie header string:
Call:
steady_set_cookieswith{ "cookies": "_sthr_session=...; remember_user_token=..." }
File locations (where cookies are stored)
Defaults (can be overridden via env):
macOS
cookies:
~/Library/Application Support/steady-mcp/cookies.txtjar:
~/Library/Application Support/steady-mcp/cookiejar.txt
Windows
cookies:
%APPDATA%\\steady-mcp\\cookies.txtjar:
%APPDATA%\\steady-mcp\\cookiejar.txt
Linux
cookies:
$XDG_CONFIG_HOME/steady-mcp/cookies.txt(or~/.config/steady-mcp/cookies.txt)jar:
$XDG_CONFIG_HOME/steady-mcp/cookiejar.txt(or~/.config/steady-mcp/cookiejar.txt)
Overrides:
STEADY_COOKIES_PATHSTEADY_COOKIE_JAR_PATH
Usage (day-to-day)
Step 0: Restart Cursor
After adding/updating MCP config, fully restart Cursor (quit + reopen).
Step 1: Login (refresh cookies)
Call:
steady_login
Then verify:
steady_ping→ should return{ "ok": true }
Step 2: List team names (optional)
Call:
steady_list_teams
Step 3: Submit today’s check-in for one team
Call:
steady_submit_checkin
Example:
Success is typically:
status_code: 302
Tools (API surface)
steady_login: log in and save cookies locallysteady_set_cookies: save browser cookies manuallysteady_ping: validate authsteady_list_teams: list team names/ids from the daily edit pagesteady_submit_checkin: submit for one team
Troubleshooting
Start here: docs/TROUBLESHOOTING.md
Common issues:
Tool not found in Cursor
fully restart Cursor
verify the
mcp.jsonentry path is correct and absoluteverify
npm installwas run intools/steady-mcp
HTTP 422
usually means the submission was rejected (already checked in / stale session / insufficient permission)
run
steady_loginagain and retryconfirm the team is actually pending on Steady’s daily page
Need debug
set
STEADY_MCP_DEBUG=1(warning: debug output may include sensitive cookies)