
Fitatu MCP Unofficial
Unofficial Model Context Protocol (MCP) server for accessing and updating data in your own Fitatu account. It provides typed tools for profile data, meal plans, nutrition summaries, food search, and recipe management over stdio or Streamable HTTP.
[!IMPORTANT] This project is not affiliated with, endorsed by, or sponsored by Fitatu. Use it only with your own account and treat Fitatu credentials and account data as sensitive.
Features
- Profile, day-plan, and nutrition summary queries.
- Latest or date-specific body measurement lookup and partial updates for explicit calendar dates.
- Food and recipe search with identifiers required by mutation tools.
- Meal item creation, update, replacement, movement, and removal.
- Recipe creation, inspection, update, and deletion.
- MCP transports for local stdio and Streamable HTTP clients.
- Local development and Docker workflows.
Requirements
- Node.js
>=22.18.0 - npm
- A Fitatu account
Docker and ngrok are optional and required only for their respective workflows.
Quick start
Install dependencies and create the local configuration file:
npm install
cp .env.example .env
Set FITATU_EMAIL and FITATU_PASSWORD in .env, then start the development server:
npm run dev
The default MCP endpoint is http://localhost:3000/mcp.
MCP client configuration
Choose one transport with MCP_TRANSPORT:
stdio
Build the server before configuring the client:
npm run build
Use absolute paths to the repository's .env and dist/index.js files:
{
"mcpServers": {
"fitatu": {
"command": "node",
"args": [
"--env-file=/absolute/path/to/fitatu-mcp-unofficial/.env",
"/absolute/path/to/fitatu-mcp-unofficial/dist/index.js"
],
"env": {
"MCP_TRANSPORT": "stdio"
}
}
}
}
The client starts and stops the server. In stdio mode, logs are written to stderr because stdout is reserved for the JSON-RPC stream.
Streamable HTTP
Start the server with npm run dev, or build and run it with:
npm run build
npm start
Clients with native Streamable HTTP support can connect directly to:
http://localhost:3000/mcp
For a client that launches remote MCP connections through a command, use mcp-remote:
{
"mcpServers": {
"fitatu": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:3000/mcp"]
}
}
}
To inspect the local server interactively:
npm run inspector
Connect the Inspector to http://localhost:3000/mcp.
Remote MCP access with ngrok
Install and authenticate ngrok. In .env, configure two different Fitatu accounts using FITATU_* and
FITATU_INTEGRATION_*, then add your assigned domain:
NGROK_DOMAIN=your-assigned-domain.ngrok-free.dev
npm run dev:all # Both accounts and the tunnel
npm run dev:test-account # Test account only (alternative)
In any MCP client that supports remote Streamable HTTP connections, use one of these URLs without authentication:
- Personal:
https://YOUR_NGROK_DOMAIN/personal/mcp - Test:
https://YOUR_NGROK_DOMAIN/test/mcp
Available tools
Configuration
Runtime configuration is read from environment variables and validated at startup.
Do not commit .env. The mobile client profile defaults match Fitatu 4.14.4 traffic captured on 2026-07-30 and can be overridden without changing code.
Docker
The current image build requires a configured .env file:
cp .env.example .env
docker build -t fitatu-mcp .
docker run --name fitatu-mcp -p 3000:3000 fitatu-mcp
The Dockerfile copies .env into the image. Treat the resulting image as sensitive; do not publish or share it.
Development
npm run test:ci is deterministic and does not load Fitatu credentials. Integration tests use the dedicated Fitatu test account described above and may
mutate its meal-plan, recipe, and body-measurement data.
See ARCHITECTURE.md for layer boundaries and design rules, and CONTRIBUTING.md for contribution guidelines.
License
Licensed under the MIT License.