Using the MCP Server
Setup
| Variable | Value |
|---|---|
OFFERLY_MCP_API_URL | apps/api's origin — e.g. http://localhost:4022 locally |
OFFERLY_MCP_TOKEN | An ofmcp_… service token, minted via Settings → MCP Connections → New Connection in the Jobweave web app |
(A third variable, OFFERLY_MCP_CONFIG, points at a JSON file holding both instead of using
separate env vars.) These variable names are a deliberate external contract from before the
Offerly → Jobweave rename and are not renamed — see Environment Variables.
Register the local (stdio) MCP server
{
"mcpServers": {
"jobweave": {
"command": "node",
"args": ["/abs/path/to/packages/mcp-tool-server/dist/mcp/index-stdio.js"],
"env": {
"OFFERLY_MCP_API_URL": "http://localhost:4022",
"OFFERLY_MCP_TOKEN": "ofmcp_…"
}
}
}
}
A remote Streamable-HTTP transport also exists for hosted callers that can't run a local
process — same tools, same ofmcp_-bearer auth model.
What to expect
- Tool errors are answers, not crashes. A non-2xx response from
apps/apicomes back as an MCP tool error carrying the API's own status/error/code verbatim. Report it; don't retry blindly. - Scopes are per-resource-and-verb. A token might have
applications:readwithoutresumes:read— see Data & Auth for the full list. A tool is only registered on a connection if the token carries the scope it needs. - No interactive auth flow. No login, no OAuth, no browser consent screen. You present a
pre-issued
ofmcp_token or the request fails — by design, not a gap.
CLI fallback
The offerly-mcp CLI is a fallback for a shell, CI, a container, or a session where the MCP
server failed to start. It defaults to fake, in-memory data unless you pass --remote or
--config — a deliberate difference from a typical CLI, so a bare run never touches a real
account by accident.
Full detail: The Jobweave Claude Code Skill, which packages this guidance for a coding agent.