Oura MCP Server
Click on "Install 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., "@Oura MCP ServerWhat was my sleep score last night?"
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.
Oura MCP Server
A Model Context Protocol (MCP) server for accessing Oura Ring data.
It runs in two modes from the same codebase:
Mode | Entrypoint | Transport | Use it for |
Local |
| stdio | Claude Code and Claude Desktop on your own machine |
Hosted |
| Streamable HTTP + OAuth | claude.ai in the browser and the Claude mobile apps |
Prerequisites
Node.js 20+
An Oura account
Related MCP server: Oura MCP
Installation
npm install
npm run buildOura credentials
Log in to the Oura Cloud Console
Create a Personal Access Token
Set it as OURA_PERSONAL_ACCESS_TOKEN. See .env.example for the full list of
variables.
The OAuth2 client credentials in
.env.exampleare read but not usable yet:OuraAuthstores them without ever running the authorization-code flow, so requests fail withNot authenticated. Use a personal access token.
Local mode (stdio)
Claude Code
claude mcp add oura -s user \
-e OURA_PERSONAL_ACCESS_TOKEN=your_token \
-- "$(command -v node)" /absolute/path/to/oura-mcp/build/index.jsClaude Desktop
Settings → Developer → Edit Config:
{
"mcpServers": {
"oura": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/oura-mcp/build/index.js"],
"env": { "OURA_PERSONAL_ACCESS_TOKEN": "your_token" }
}
}
}Pass the token in env rather than relying on a .env file. dotenv resolves
.env against the current working directory, which for a client-launched
server is wherever the client happened to start — not this repo.
Testing
node test.js get_daily_sleep 2026-08-01Hosted mode (HTTP + OAuth)
claude.ai and the mobile apps only talk to remote MCP servers over HTTPS, so reaching your data from a phone means deploying this somewhere.
What the auth actually does
The server is its own OAuth 2.1 authorization server. Your Oura token stays in
server-side env and is never handed to the client; the OAuth flow exists only to
prove that whoever is calling /mcp knows MCP_AUTH_PASSWORD.
Client ids, authorization codes, and tokens are all HMAC-signed payloads rather than database rows, so a redeploy doesn't sign you out and no storage needs provisioning. Clients are registered as public clients and authenticate with PKCE. Authorization codes are single-use.
Deploying to Railway
Create a new Railway project from this repo.
railway.jsonpins the build and start commands and points the healthcheck at/healthz.Generate a signing secret:
openssl rand -hex 32Set these variables in the Railway service:
Variable
Value
OURA_PERSONAL_ACCESS_TOKENyour Oura token
OAUTH_SIGNING_SECRETthe hex string from step 2
MCP_AUTH_PASSWORDthe password you'll type when connecting
You do not need to set
PUBLIC_URLon Railway. The server falls back toRAILWAY_PUBLIC_DOMAIN, which Railway injects once the service has a domain (Settings → Networking → Public Networking → Generate Domain). SetPUBLIC_URLexplicitly only when hosting elsewhere, or to override the advertised origin — it must then match the real origin exactly, since it's what the server publishes in its OAuth metadata.Confirm the deploy:
curl https://your-app.up.railway.app/healthz
PORT is injected by Railway; don't set it yourself.
Connecting Claude
In claude.ai → Settings → Connectors → Add custom connector, use:
https://your-app.up.railway.app/mcpLeave the OAuth client fields blank — the server supports dynamic client
registration, so Claude registers itself. You'll be redirected to a sign-in page
asking for MCP_AUTH_PASSWORD, and after that the connector is available in the
browser and on the mobile apps under the same account.
Endpoints
Path | Purpose |
| The MCP endpoint. Requires a bearer token and the |
| OAuth, mounted by the MCP SDK |
| Password form posted from the authorize page |
| AS metadata |
| Protected-resource metadata |
| Healthcheck |
GET and DELETE on /mcp return 405: the server runs the transport in
stateless mode, so there's no long-lived SSE stream or session to tear down.
Every request gets a fresh server instance, which is what lets a redeploy or a
second replica pick up mid-conversation.
Available resources
personal_info, daily_activity, daily_readiness, daily_sleep, sleep,
sleep_time, workout, session, daily_spo2, rest_mode_period,
ring_configuration, daily_stress, daily_resilience,
daily_cardiovascular_age, vO2_max
Date-based resources default to the last 7 days.
Available tools
Every date-based resource above has a matching get_<name> tool taking
startDate and endDate in YYYY-MM-DD form — 13 in total.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for the Oura Ring API v2, providing access to sleep, activity, readiness, heart rate, and workout data via OAuth.52421MIT
- AlicenseAqualityAmaintenanceLocal-first MCP server that connects AI agents to your Oura Ring readiness, sleep, activity, and HRV data. Tokens never leave your machine.27196MIT
- Alicense-qualityBmaintenanceA Model Context Protocol (MCP) server that provides AI assistants with structured, semantic access to your Oura Ring health data.MIT
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaredstauffer/oura-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server