AroFlo MCP
Standalone, production-ready MCP server for AroFlo with first-class request signing and a clean tool surface.
Quick Start
Install (Local)
This repo ships an MCP server executable named aroflo-mcp (stdio transport by default).
Install the server on your machine (puts aroflo-mcp on your PATH via npm link):
make install
Install Into Codex (stdio)
- Create a local
.env(not committed) with your credentials:
cp .env.example .env
# edit .env
- Register the server in Codex (stores env in
~/.codex/config.toml, not passed as tool args):
make codex-install
- Verify:
codex mcp get aroflo
Manual Codex Install (Alternative)
If you prefer doing it manually (same env variables, stored in Codex config):
codex mcp add aroflo \
--env AROFLO_API_BASE_URL=https://api.aroflo.com/ \
--env AROFLO_ACCEPT=text/json \
--env AROFLO_SECRET_KEY=... \
--env AROFLO_UENCODED=... \
--env AROFLO_PENCODED=... \
--env AROFLO_ORG_ENCODED=... \
--env MCP_TRANSPORT=stdio \
-- "$(command -v node)" "$(pwd)/dist/mcp/server.js"
Notes:
- If Codex (desktop app) hangs starting the server, it is usually a PATH issue (common when Node is installed via
nvmand the app is launched outside your shell). - Fix 1: Launch Codex from a terminal so it inherits your shell PATH (
codex app). - Fix 2: Configure the MCP server to run via an absolute Node path (see
docs/runbooks.md).
Development
Install dependencies:
npm install
Build and test:
npm run test
npm run build
Run server (stdio):
npm run dev
Run server (HTTP Streamable transport):
MCP_TRANSPORT=http npm run dev:http
MCP Inspector
To interactively test tools/list and tools/call via the official inspector UI:
make inspector
Project Layout
src/
auth/
aroflo/
mcp/
utils/
tests/
docs/
Environment
Required variables:
AROFLO_SECRET_KEYAROFLO_UENCODEDAROFLO_PENCODEDAROFLO_ORG_ENCODED
Optional variables:
AROFLO_API_BASE_URL(default:https://api.aroflo.com/)AROFLO_ACCEPT(default:text/json)AROFLO_HOST_IPAROFLO_TIMEOUT_MS(default:65000)AROFLO_MAX_RETRIES(default:2)LOG_LEVEL(default:info)
HTTP Transport
Set MCP_TRANSPORT=http to run an HTTP server (Streamable HTTP transport) at:
http://${MCP_HTTP_HOST}:${MCP_HTTP_PORT}${MCP_HTTP_PATH}
Using Extracted API Docs (docs/api)
This repo includes a local snapshot of the AroFlo API docs in docs/api/.
The MCP server exposes these markdown files as MCP resources so the client/LLM can look up valid WHERE fields, JOIN areas, etc:
aroflo://docs/api->docs/api/README.mdaroflo://docs/api/<slug>->docs/api/<slug>.md(example:aroflo://docs/api/quotes)
Example query: list Quotes with acceptance status "Awaiting Decision":
- Tool:
aroflo_get_quotes - Args:
{
"where": "and|acceptancestatus|=|Awaiting Decision",
"page": 1,
"pageSize": 50
}
Example report: open projects with labour hours per task (recommended for progress reporting):
- Tool:
aroflo_report_open_projects_with_task_hours - Args (add optional filters like
sinceDateRequestedto keep outputs small):
{
"sinceCreatedUtc": "2025-01-01",
"sinceDateRequested": "2025-01-01",
"hoursOnly": true,
"includeTaskStatus": true,
"mode": "data"
}
Docs
docs/aroflo-auth.mddocs/mcp-tools.mddocs/examples.mddocs/runbooks.mddocs/deployment.mddocs/api/*