OpenNomos Agent MCP
Use this skill to inspect live OpenNomos MCP data through the current REST implementation.
Important: this skill is for the current OpenNomos MCP REST layer, not a standard MCP transport server. Treat it as authenticated HTTP API access.
Quick Start
- Default
BASE_URL to https://api.opennomos.com unless the user explicitly provides another host.
- Determine the
nk_ API key.
- Resolve shell environment before repo
.env; do not assume .env has been loaded into the process.
- If no key is available after explicit input, shell env, and repo
.env, stop and ask the user to provide one.
- For localhost, call
curl --noproxy '*' to avoid local proxy interference.
- Check
GET /health first when connectivity is unclear.
- Call
GET /api/v1/mcp/me/points before comparing event streams; this verifies the key and establishes the current actor context.
- Pick the smallest set of MCP endpoints needed for the question.
- Summarize the live result in plain language instead of dumping raw JSON.
Inputs To Collect
- Base URL:
- default:
https://api.opennomos.com
- override only when the user gives a different host such as
http://localhost:8100
- One auth credential:
- MCP API key starting with
nk_
Default assumption:
- if the user only gives
BASE_URL + nk_ key, proceed directly with MCP data routes
- if the user gives no key, check
OPENNOMOS_MCP_KEY in the shell environment, then the repo-root .env
- if no key is available, ask the user for a key before live calls
If the user asks for current platform state, always query the live endpoint. Do not answer from memory.
Never print or store the nk_ key. Redact it in logs, markdown, and final answers.
Core Workflow
1. Resolve runtime inputs
Resolve values in this order:
Base URL:
- explicit user-provided base URL
- shell
OPENNOMOS_MCP_BASE_URL
- repo-root
.env OPENNOMOS_MCP_BASE_URL
https://api.opennomos.com
Token:
- explicit user-provided
nk_ key
- shell
OPENNOMOS_MCP_KEY
- repo-root
.env OPENNOMOS_MCP_KEY
- ask the user for a key
Shell environment values override .env. Read .env directly when needed, but do not source it unless the caller explicitly wants shell state changed.
2. Verify connectivity
Run:
curl -sS -i "$BASE_URL/health"
For localhost only:
curl --noproxy '*' -sS -i "$BASE_URL/health"
Interpretation:
200 means the backend is reachable
502 on localhost often means the shell used a proxy instead of direct local access
- connection refused means the backend is not listening yet
3. Verify the credential and current actor
Use one low-cost MCP endpoint before task validation or ledger interpretation:
curl -sS -i \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/api/v1/mcp/me/points"
For localhost only, add --noproxy '*'.
Interpretation:
200 means the token/key works
401 means the token/key is invalid or revoked
403 means the token/key is valid but lacks permission
For a 200, keep the response as actor evidence. Do not print the token. Use returned user/account fields when present; otherwise state that the key was accepted and that subsequent /event-stream calls are scoped to the authenticated user.
Do not use active_projects or balances from /me/points as the only project discovery source. They show current point state, not the full set of projects worth checking.
4. Discover projects and task rules
For broad project discovery:
- Call
GET /api/v1/mcp/projects for projects accessible to the current key.
- Call
GET /api/v1/mcp/explore/projects for platform-level discoverable projects.
- Normalize project IDs:
/projects: prefer project_id; fall back to id only when needed.
/explore/projects: prefer id; fall back to project_id only when needed.
- De-duplicate project IDs before calling per-project endpoints.
- Respect pagination (
page, page_size, limit, total_pages, or an empty page) when the user asks for a complete inventory.
- For each relevant project, call
GET /api/v1/mcp/projects/:project_id/tasks.
- Treat
404 from /tasks as "no task rule configured", not as transport failure.
When summarizing, distinguish "accessible to this key" from "discoverable on the platform".
5. Choose the right endpoint group
Use these patterns:
- Need to see what projects the current user can touch:
- Need to see public or platform-level discoverable projects:
GET /api/v1/mcp/explore/projects
- Need detail for one project:
GET /api/v1/mcp/projects/:project_id
- Need to know what tasks are available:
GET /api/v1/mcp/projects/:project_id/tasks
- Need project KPI/overview:
GET /api/v1/mcp/projects/:project_id/overview
- Need project daily operational metrics:
GET /api/v1/mcp/projects/:project_id/daily-ops
- Need per-event daily volume:
GET /api/v1/mcp/projects/:project_id/daily-event-summary
- Need project Opportunity reports, review evaluation, or review status:
GET /api/v1/mcp/projects/:project_id/opportunities
- Need to update a project Opportunity review:
PATCH /api/v1/mcp/projects/:project_id/opportunities/:event_id/review
- Need to see feedback on the current user's submitted Opportunities:
GET /api/v1/mcp/me/opportunities
- Need to check whether my task event was recorded:
GET /api/v1/mcp/projects/:project_id/event-stream
- Need the user's total points:
GET /api/v1/mcp/me/points
- Need points or ledger for one project:
GET /api/v1/mcp/me/projects/:project_id/points
GET /api/v1/mcp/me/projects/:project_id/ledger
Read references/endpoints.md for the exact table and curl examples.
6. Interpret results correctly
Apply these rules:
404 from /tasks usually means the project has no configured task rule yet
projects can contain both project records and application records; distinguish them before summarizing
/api/v1/mcp/projects/:project_id/opportunities only returns Contribution Report events whose action_category is opportunity, and it requires the authenticated user to have project review access
PATCH /api/v1/mcp/projects/:project_id/opportunities/:event_id/review requires project review access and preserves omitted fields; send only the fields you intend to change
/api/v1/mcp/me/opportunities returns only the current authenticated user's submitted Opportunities plus project feedback
/api/v1/mcp/projects/:project_id/event-stream is the source of truth for “did my task event enter OpenNomos raw ingestion?”
ledger is accounting-level data and may show types like daily_emission or rollback instead of task event names
- if the user asks “how did I get these points,” explain what the ledger confirms and clearly label any inference from task rules
7. Summarize for the user
Prefer:
- concrete counts
- project names
- task names and scores
- date ranges
- explicit notes on missing rules or missing detail
- evidence fields: endpoint, HTTP status, project ID, event type or ledger type, timestamp, match reason, and final outcome
Avoid:
- pasting raw JSON unless the user explicitly asks for it
- saying “MCP method” when the current route is just a REST endpoint
- exposing
nk_ keys or secrets from shell or .env
Common Task Patterns
List current platform projects
- Call
/api/v1/mcp/projects to get the current key's accessible projects.
- Call
/api/v1/mcp/explore/projects to get discoverable platform projects.
- Normalize and de-duplicate IDs before per-project calls.
- If the user asks for all projects, paginate until
total_pages is exhausted or a page returns no items.
- Present a clean list with source (
accessible, explore, or both), rank/category/participant fields when available, and whether task rules exist.
Find which tasks can be participated in
- Call
/api/v1/mcp/explore/projects or /api/v1/mcp/projects
- Extract unique
project_id values
- Call
/api/v1/mcp/projects/:project_id/tasks for each relevant project
- Mark
404 project rule not found as “no task rule configured”
- Present task names, descriptions, scores, and limits
Check whether my task event was recorded
- Identify the project ID
- Confirm the current actor with
/api/v1/mcp/me/points if this has not already been done in the run
- Call
/api/v1/mcp/projects/:project_id/event-stream
- Check only the current authenticated user's returned events
- Match on the most relevant signal available:
event_type
event_id
- task-related fields inside
payload_preview
- recent timestamp after the action was performed
- Report one of these outcomes:
recorded: matching event appears in the stream
pending: action completed but no matching event is visible yet
unclear: nearby events exist but there is not enough evidence to match the task confidently
failed: no evidence exists after a reasonable wait or the platform clearly rejected the action
Keep tweet URLs, form submission responses, or product-side usage responses as intermediate evidence only. Event-stream confirmation remains the final arbiter for task execution.
Check whether an MCP key works
- Call
/health
- Call
/api/v1/mcp/me/points
- Optionally call
/api/v1/mcp/projects
- Confirm whether the key is active by reading the HTTP status and returned data
Inspect daily project operations
- Identify the project ID from
/api/v1/mcp/projects or /api/v1/mcp/explore/projects.
- Call
/api/v1/mcp/projects/:project_id/daily-ops?window=7d for a short recent trend, or window=30d for a monthly view.
- Interpret
registered_users from user_signup events.
- Interpret
daily_use_users and active_users from daily_use events; currently active_users equals daily_use_users.
- Use
signup_events and daily_use_events for event volume, not unique-user counts.
- If all usage fields are zero, say that no
daily_use aggregate is visible for the requested window rather than assuming nobody used the product.
Inspect project Opportunities
- Identify the project ID from
/api/v1/mcp/projects or /api/v1/mcp/explore/projects.
- Call
/api/v1/mcp/projects/:project_id/opportunities?date=all&page=1&page_size=20.
- Filter with
type, date=today|all, evaluation=all|useful|not_useful, and status=all|pending|reviewing|contacted|adopted|ignored|done only when the user asks.
- Treat returned rows as project-side Opportunity Contribution Reports, not task event-stream validation.
- Summarize
contribution_type, key_information, reason, suggested_action, evaluation, status, received_at, and reviewer fields when relevant.
Update a project Opportunity review
- Confirm the current key has project review access by calling
/api/v1/mcp/projects/:project_id/opportunities?date=all&page=1&page_size=20.
- Identify the target
event_id.
- Call
PATCH /api/v1/mcp/projects/:project_id/opportunities/:event_id/review.
- Send only fields that should change:
evaluation: useful or not_useful
status: pending, reviewing, contacted, adopted, ignored, or done
note: reviewer-facing reason or next-step note
- After the PATCH, read the returned item and report the updated
evaluation, status, review_note, and review_updated_at.
Do not update reviews unless the user explicitly asks for a write action. This route changes project-side state.
Check feedback on my submitted Opportunities
- Confirm the current actor with
/api/v1/mcp/me/points if this has not already been done in the run.
- Call
/api/v1/mcp/me/opportunities?page=1&page_size=20.
- Filter with
project_id, type, date=today|all, evaluation=all|useful|not_useful|unreviewed, and status=all|pending|reviewing|contacted|adopted|ignored|done only when useful.
- Summarize what the project has decided:
- unreviewed:
evaluation is empty and status is usually pending
- useful or not useful: show
review_note and review_updated_at
- status progress: explain
reviewing, contacted, adopted, ignored, or done
Work with only default BASE_URL + nk_ key
- Use
https://api.opennomos.com unless the user explicitly overrides it
- Use the provided key, or read
OPENNOMOS_MCP_KEY
- Call
/api/v1/mcp/me/points
- Call
/api/v1/mcp/projects or /api/v1/mcp/explore/projects
- Call
/api/v1/mcp/projects/:project_id/tasks as needed
Explain a user's current points
- Call
/api/v1/mcp/me/points
- Use
/me/points for balances and actor context, not complete project discovery
- Call
/api/v1/mcp/me/projects/:project_id/points for each relevant project
- Call
/api/v1/mcp/me/projects/:project_id/ledger; paginate or filter with date_from, date_to, and entry_type when needed
- Group ledger entries by
type
- Treat
daily_emission, rollback, and other ledger types as accounting categories unless payload/details confidently link them to a task
- Explain what is confirmed by the ledger, what is inferred from task rules, and what remains unknown
Validate task execution
- Use
/api/v1/mcp/projects/:project_id/event-stream to answer “was my task event ingested?”
- Use the
recorded / pending / unclear / failed taxonomy
- End the validation there unless the user explicitly asks about points or ledger
Environment Variables
Use these names:
OPENNOMOS_MCP_KEY: default auth key when the user did not provide one
OPENNOMOS_MCP_BASE_URL: optional override for https://api.opennomos.com
Base URL resolution order:
- explicit user-provided base URL
- shell
OPENNOMOS_MCP_BASE_URL
- repo-root
.env OPENNOMOS_MCP_BASE_URL
https://api.opennomos.com
Token resolution order:
- explicit user-provided
nk_ key
- shell
OPENNOMOS_MCP_KEY
- repo-root
.env OPENNOMOS_MCP_KEY
- ask the user for a key
Shell env wins over .env. Never write secret values into markdown memory, logs, or final answers.
Localhost Notes
When the backend is on localhost, prefer:
curl --noproxy '*' ...
Reason: some environments export http_proxy, and plain curl may route the request through a proxy and produce a false 502.
Output Standard
When reporting results:
- lead with the answer
- include exact endpoint-backed facts and HTTP statuses when relevant
- use absolute dates when relevant
- separate “confirmed by API” from “inferred from rules”
- for task validation, report
recorded, pending, unclear, or failed
- include the endpoint, project ID, event or ledger type, timestamp, and match reason for any claimed result
1---2name: opennomos-agent-mcp3description: Query the OpenNomos MCP REST layer with the default base URL `https://api.opennomos.com` and an `nk_` API key. Use when tasks involve analyzing OpenNomos projects, available tasks, project overview, daily operational metrics, project Opportunity reports, project-side Opportunity review updates, current actor identity, my submitted Opportunity feedback, my task event stream, user points, or points ledger from the live backend.4---56# OpenNomos Agent MCP78Use this skill to inspect live OpenNomos MCP data through the current REST implementation.910Important: this skill is for the current OpenNomos MCP REST layer, not a standard MCP transport server. Treat it as authenticated HTTP API access.1112## Quick Start13141. Default `BASE_URL` to `https://api.opennomos.com` unless the user explicitly provides another host.152. Determine the `nk_` API key.163. Resolve shell environment before repo `.env`; do not assume `.env` has been loaded into the process.174. If no key is available after explicit input, shell env, and repo `.env`, stop and ask the user to provide one.185. For localhost, call `curl --noproxy '*'` to avoid local proxy interference.196. Check `GET /health` first when connectivity is unclear.207. Call `GET /api/v1/mcp/me/points` before comparing event streams; this verifies the key and establishes the current actor context.218. Pick the smallest set of MCP endpoints needed for the question.229. Summarize the live result in plain language instead of dumping raw JSON.2324## Inputs To Collect2526- Base URL:27 - default: `https://api.opennomos.com`28 - override only when the user gives a different host such as `http://localhost:8100`29- One auth credential:30 - MCP API key starting with `nk_`3132Default assumption:3334- if the user only gives `BASE_URL + nk_ key`, proceed directly with MCP data routes35- if the user gives no key, check `OPENNOMOS_MCP_KEY` in the shell environment, then the repo-root `.env`36- if no key is available, ask the user for a key before live calls3738If the user asks for current platform state, always query the live endpoint. Do not answer from memory.39Never print or store the `nk_` key. Redact it in logs, markdown, and final answers.4041## Core Workflow4243### 1. Resolve runtime inputs4445Resolve values in this order:4647Base URL:481. explicit user-provided base URL492. shell `OPENNOMOS_MCP_BASE_URL`503. repo-root `.env` `OPENNOMOS_MCP_BASE_URL`514. `https://api.opennomos.com`5253Token:541. explicit user-provided `nk_` key552. shell `OPENNOMOS_MCP_KEY`563. repo-root `.env` `OPENNOMOS_MCP_KEY`574. ask the user for a key5859Shell environment values override `.env`. Read `.env` directly when needed, but do not source it unless the caller explicitly wants shell state changed.6061### 2. Verify connectivity6263Run:6465```bash66curl -sS -i "$BASE_URL/health"67```6869For localhost only:7071```bash72curl --noproxy '*' -sS -i "$BASE_URL/health"73```7475Interpretation:7677- `200` means the backend is reachable78- `502` on localhost often means the shell used a proxy instead of direct local access79- connection refused means the backend is not listening yet8081### 3. Verify the credential and current actor8283Use one low-cost MCP endpoint before task validation or ledger interpretation:8485```bash86curl -sS -i \87 -H "Authorization: Bearer $TOKEN" \88 "$BASE_URL/api/v1/mcp/me/points"89```9091For localhost only, add `--noproxy '*'`.9293Interpretation:9495- `200` means the token/key works96- `401` means the token/key is invalid or revoked97- `403` means the token/key is valid but lacks permission9899For a `200`, keep the response as actor evidence. Do not print the token. Use returned user/account fields when present; otherwise state that the key was accepted and that subsequent `/event-stream` calls are scoped to the authenticated user.100101Do not use `active_projects` or balances from `/me/points` as the only project discovery source. They show current point state, not the full set of projects worth checking.102103### 4. Discover projects and task rules104105For broad project discovery:1061071. Call `GET /api/v1/mcp/projects` for projects accessible to the current key.1082. Call `GET /api/v1/mcp/explore/projects` for platform-level discoverable projects.1093. Normalize project IDs:110 - `/projects`: prefer `project_id`; fall back to `id` only when needed.111 - `/explore/projects`: prefer `id`; fall back to `project_id` only when needed.1124. De-duplicate project IDs before calling per-project endpoints.1135. Respect pagination (`page`, `page_size`, `limit`, `total_pages`, or an empty page) when the user asks for a complete inventory.1146. For each relevant project, call `GET /api/v1/mcp/projects/:project_id/tasks`.1157. Treat `404` from `/tasks` as "no task rule configured", not as transport failure.116117When summarizing, distinguish "accessible to this key" from "discoverable on the platform".118119### 5. Choose the right endpoint group120121Use these patterns:122123- Need to see what projects the current user can touch:124 - `GET /api/v1/mcp/projects`125- Need to see public or platform-level discoverable projects:126 - `GET /api/v1/mcp/explore/projects`127- Need detail for one project:128 - `GET /api/v1/mcp/projects/:project_id`129- Need to know what tasks are available:130 - `GET /api/v1/mcp/projects/:project_id/tasks`131- Need project KPI/overview:132 - `GET /api/v1/mcp/projects/:project_id/overview`133- Need project daily operational metrics:134 - `GET /api/v1/mcp/projects/:project_id/daily-ops`135- Need per-event daily volume:136 - `GET /api/v1/mcp/projects/:project_id/daily-event-summary`137- Need project Opportunity reports, review evaluation, or review status:138 - `GET /api/v1/mcp/projects/:project_id/opportunities`139- Need to update a project Opportunity review:140 - `PATCH /api/v1/mcp/projects/:project_id/opportunities/:event_id/review`141- Need to see feedback on the current user's submitted Opportunities:142 - `GET /api/v1/mcp/me/opportunities`143- Need to check whether my task event was recorded:144 - `GET /api/v1/mcp/projects/:project_id/event-stream`145- Need the user's total points:146 - `GET /api/v1/mcp/me/points`147- Need points or ledger for one project:148 - `GET /api/v1/mcp/me/projects/:project_id/points`149 - `GET /api/v1/mcp/me/projects/:project_id/ledger`150151Read [references/endpoints.md](references/endpoints.md) for the exact table and curl examples.152153### 6. Interpret results correctly154155Apply these rules:156157- `404` from `/tasks` usually means the project has no configured task rule yet158- `projects` can contain both project records and application records; distinguish them before summarizing159- `/api/v1/mcp/projects/:project_id/opportunities` only returns Contribution Report events whose `action_category` is `opportunity`, and it requires the authenticated user to have project review access160- `PATCH /api/v1/mcp/projects/:project_id/opportunities/:event_id/review` requires project review access and preserves omitted fields; send only the fields you intend to change161- `/api/v1/mcp/me/opportunities` returns only the current authenticated user's submitted Opportunities plus project feedback162- `/api/v1/mcp/projects/:project_id/event-stream` is the source of truth for “did my task event enter OpenNomos raw ingestion?”163- `ledger` is accounting-level data and may show types like `daily_emission` or `rollback` instead of task event names164- if the user asks “how did I get these points,” explain what the ledger confirms and clearly label any inference from task rules165166### 7. Summarize for the user167168Prefer:169170- concrete counts171- project names172- task names and scores173- date ranges174- explicit notes on missing rules or missing detail175- evidence fields: endpoint, HTTP status, project ID, event type or ledger type, timestamp, match reason, and final outcome176177Avoid:178179- pasting raw JSON unless the user explicitly asks for it180- saying “MCP method” when the current route is just a REST endpoint181- exposing `nk_` keys or secrets from shell or `.env`182183## Common Task Patterns184185### List current platform projects1861871. Call `/api/v1/mcp/projects` to get the current key's accessible projects.1882. Call `/api/v1/mcp/explore/projects` to get discoverable platform projects.1893. Normalize and de-duplicate IDs before per-project calls.1904. If the user asks for all projects, paginate until `total_pages` is exhausted or a page returns no items.1915. Present a clean list with source (`accessible`, `explore`, or both), rank/category/participant fields when available, and whether task rules exist.192193### Find which tasks can be participated in1941951. Call `/api/v1/mcp/explore/projects` or `/api/v1/mcp/projects`1962. Extract unique `project_id` values1973. Call `/api/v1/mcp/projects/:project_id/tasks` for each relevant project1984. Mark `404 project rule not found` as “no task rule configured”1995. Present task names, descriptions, scores, and limits200201### Check whether my task event was recorded2022031. Identify the project ID2042. Confirm the current actor with `/api/v1/mcp/me/points` if this has not already been done in the run2053. Call `/api/v1/mcp/projects/:project_id/event-stream`2064. Check only the current authenticated user's returned events2075. Match on the most relevant signal available:208 - `event_type`209 - `event_id`210 - task-related fields inside `payload_preview`211 - recent timestamp after the action was performed2126. Report one of these outcomes:213 - `recorded`: matching event appears in the stream214 - `pending`: action completed but no matching event is visible yet215 - `unclear`: nearby events exist but there is not enough evidence to match the task confidently216 - `failed`: no evidence exists after a reasonable wait or the platform clearly rejected the action217218Keep tweet URLs, form submission responses, or product-side usage responses as intermediate evidence only. Event-stream confirmation remains the final arbiter for task execution.219220### Check whether an MCP key works2212221. Call `/health`2232. Call `/api/v1/mcp/me/points`2243. Optionally call `/api/v1/mcp/projects`2254. Confirm whether the key is active by reading the HTTP status and returned data226227### Inspect daily project operations2282291. Identify the project ID from `/api/v1/mcp/projects` or `/api/v1/mcp/explore/projects`.2302. Call `/api/v1/mcp/projects/:project_id/daily-ops?window=7d` for a short recent trend, or `window=30d` for a monthly view.2313. Interpret `registered_users` from `user_signup` events.2324. Interpret `daily_use_users` and `active_users` from `daily_use` events; currently `active_users` equals `daily_use_users`.2335. Use `signup_events` and `daily_use_events` for event volume, not unique-user counts.2346. If all usage fields are zero, say that no `daily_use` aggregate is visible for the requested window rather than assuming nobody used the product.235236### Inspect project Opportunities2372381. Identify the project ID from `/api/v1/mcp/projects` or `/api/v1/mcp/explore/projects`.2392. Call `/api/v1/mcp/projects/:project_id/opportunities?date=all&page=1&page_size=20`.2403. Filter with `type`, `date=today|all`, `evaluation=all|useful|not_useful`, and `status=all|pending|reviewing|contacted|adopted|ignored|done` only when the user asks.2414. Treat returned rows as project-side Opportunity Contribution Reports, not task event-stream validation.2425. Summarize `contribution_type`, `key_information`, `reason`, `suggested_action`, `evaluation`, `status`, `received_at`, and reviewer fields when relevant.243244### Update a project Opportunity review2452461. Confirm the current key has project review access by calling `/api/v1/mcp/projects/:project_id/opportunities?date=all&page=1&page_size=20`.2472. Identify the target `event_id`.2483. Call `PATCH /api/v1/mcp/projects/:project_id/opportunities/:event_id/review`.2494. Send only fields that should change:250 - `evaluation`: `useful` or `not_useful`251 - `status`: `pending`, `reviewing`, `contacted`, `adopted`, `ignored`, or `done`252 - `note`: reviewer-facing reason or next-step note2535. After the PATCH, read the returned item and report the updated `evaluation`, `status`, `review_note`, and `review_updated_at`.254255Do not update reviews unless the user explicitly asks for a write action. This route changes project-side state.256257### Check feedback on my submitted Opportunities2582591. Confirm the current actor with `/api/v1/mcp/me/points` if this has not already been done in the run.2602. Call `/api/v1/mcp/me/opportunities?page=1&page_size=20`.2613. Filter with `project_id`, `type`, `date=today|all`, `evaluation=all|useful|not_useful|unreviewed`, and `status=all|pending|reviewing|contacted|adopted|ignored|done` only when useful.2624. Summarize what the project has decided:263 - unreviewed: `evaluation` is empty and status is usually `pending`264 - useful or not useful: show `review_note` and `review_updated_at`265 - status progress: explain `reviewing`, `contacted`, `adopted`, `ignored`, or `done`266267### Work with only default BASE_URL + `nk_` key2682691. Use `https://api.opennomos.com` unless the user explicitly overrides it2702. Use the provided key, or read `OPENNOMOS_MCP_KEY`2713. Call `/api/v1/mcp/me/points`2724. Call `/api/v1/mcp/projects` or `/api/v1/mcp/explore/projects`2735. Call `/api/v1/mcp/projects/:project_id/tasks` as needed274275### Explain a user's current points2762771. Call `/api/v1/mcp/me/points`2782. Use `/me/points` for balances and actor context, not complete project discovery2793. Call `/api/v1/mcp/me/projects/:project_id/points` for each relevant project2804. Call `/api/v1/mcp/me/projects/:project_id/ledger`; paginate or filter with `date_from`, `date_to`, and `entry_type` when needed2815. Group ledger entries by `type`2826. Treat `daily_emission`, `rollback`, and other ledger types as accounting categories unless payload/details confidently link them to a task2837. Explain what is confirmed by the ledger, what is inferred from task rules, and what remains unknown284285### Validate task execution2862871. Use `/api/v1/mcp/projects/:project_id/event-stream` to answer “was my task event ingested?”2882. Use the `recorded` / `pending` / `unclear` / `failed` taxonomy2893. End the validation there unless the user explicitly asks about points or ledger290291## Environment Variables292293Use these names:294295- `OPENNOMOS_MCP_KEY`: default auth key when the user did not provide one296- `OPENNOMOS_MCP_BASE_URL`: optional override for `https://api.opennomos.com`297298Base URL resolution order:2993001. explicit user-provided base URL3012. shell `OPENNOMOS_MCP_BASE_URL`3023. repo-root `.env` `OPENNOMOS_MCP_BASE_URL`3034. `https://api.opennomos.com`304305Token resolution order:3063071. explicit user-provided `nk_` key3082. shell `OPENNOMOS_MCP_KEY`3093. repo-root `.env` `OPENNOMOS_MCP_KEY`3104. ask the user for a key311312Shell env wins over `.env`. Never write secret values into markdown memory, logs, or final answers.313314## Localhost Notes315316When the backend is on `localhost`, prefer:317318```bash319curl --noproxy '*' ...320```321322Reason: some environments export `http_proxy`, and plain `curl` may route the request through a proxy and produce a false `502`.323324## Output Standard325326When reporting results:327328- lead with the answer329- include exact endpoint-backed facts and HTTP statuses when relevant330- use absolute dates when relevant331- separate “confirmed by API” from “inferred from rules”332- for task validation, report `recorded`, `pending`, `unclear`, or `failed`333- include the endpoint, project ID, event or ledger type, timestamp, and match reason for any claimed result