mypenny-notes
Registry code: 117c728ecd4deb40
Penny MCP catalog 0.4.5.
At conversation start call penny_session_start once. Before answering from history, read with penny_read; save durable findings promptly with penny_write. If Penny guidance is missing or stale after a tool refresh, call penny_get_skill and read its returned skill. Follow the user's instructions and consent gates; confirm before deleting or overwriting. Penny is your private notebook for this user and your work together. Treat saved items as your own notes — say things like "let me check my notes" or "I'll make a note of that," never "memories." Follow the guidance…
- endpoint
- https://app.mypenny.ai/mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is mypenny-notes live?
- Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
- Is mypenny-notes free to use?
- Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
- What tools does mypenny-notes have?
- 7 tools: penny_start_setup, penny_session_start, penny_edit, penny_write, penny_delete, penny_get_skill, penny_read.
- Is mypenny-notes safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.7%· all time 99.7%
last good check
of 7 tools
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- unknown → live
- topic
- ai & agents memory & context
- used for
- save user preferences and decisions
- search past notes before answering
- edit saved notes
- takes → gives
- text → text
- tools
- 2 reads5 changes data
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
penny_start_setup changes data auth-required never probed
Setup in phases; omit phase to start, resume from meta.onboarding.phase. skipForGood opts out. Stage an encrypted import, show showUser, then save or discard as the user says. While an import is open, finish can't complete setup.
{ "type": "object", "properties": { "stop": { "type": "integer", "maximum": 4, "minimum": 0, "description": "Tour stop, with phase tour." }, "phase": { "enum": [ "start", "import", "gaps", "tour", "finish" ], "type": "string", "description": "Phase to run; omit to start." }, "client": { "type": "string", "description": "Actual host: claude-desktop, claude-web, claude-code, codex, chatgpt, gemini, perplexity, grok (web only), grok-bot or other; tailors paste guidance." }, "counts": { "type": "object", "properties": { "answers": { "type": "integer", "minimum": 0 }, "imported": { "type": "integer", "minimum": 0 }, "featuresCreated": { "type": "integer", "minimum": 0 } }, "description": "Cumulative answers/featuresCreated. Ledger imports ignore imported; only committed receipts count." }, "draftId": { "type": "string", "description": "Returned draft ID." }, "dropItemIds": { "type": "array", "items": { "type": "string" }, "description": "save: dropped ids (values of items)." }, "importDraft": { "type": "string", "description": "Strict JSON {notes,profiles}; returned schema. 10 notes, 4 replacements, 64 KiB UTF-8." }, "keepItemIds": { "type": "array", "items": { "type": "string" }, "description": "save: left-out ids the user kept." }, "skipForGood": { "type": "boolean", "description": "User requested permanent setup opt-out." }, "importAction": { "enum": [ "stage", "status", "save", "discard" ], "type": "string", "description": "All but status need draftId and expectedRevision; stage also importDraft. status re-sends the list." }, "prevAccepted": { "type": "boolean", "description": "Did the user accept the previous tour stop's offer?" }, "expectedRevision": { "type": "integer", "minimum": 0, "description": "Returned revision." } } }arguments 89 linespenny_session_start changes data auth-required 13h ago
Call once at the start of every conversation, before the first substantive reply. If the host saves this result to a file because it is too large, read the whole file before you reply. Retain results in execution storage before bounded display; inspect one text OR structured payload. Follow next[] in order; it starts with reading the Penny skill. Reuse the complete, untruncated profile (persona/facts/preferences/custom blocks) and answer from it before searching notes. Follow self_improvement throughout the conversation. `meta.onboarding` present: offer penny_start_setup, resuming from its phase. meta.saveDrought true: follow drought repair. Inventories of trackers, rhythms, tasks and Projects are capped; meta.truncated.* means drill down with penny_read. skills.defined names every user-saved skill (read one with penny_read target:skills view:one before using it); it excludes the built-in Penny skill. `features` says which features are in use and when; consult it and the inventory before choosing entityType. tz is IANA (default UTC) for local Today/Overdue and dueNow. projects is a bounded PRIVATE directory with coverage and dated attention candidates, not a search of all Spaces; read relevant Briefs by projectId. Workspace-only connections cannot call this: use penny_read target:projects view:scopes, then explicit workspaceId. projectKey includes only the matching repository subconscious block, not a Penny Project.
{ "type": "object", "properties": { "tz": { "type": "string", "description": "IANA timezone for today/overdue boundaries (e.g. America/New_York); default UTC." }, "projectKey": { "type": "string", "description": "Include subconscious:<projectKey>; exclude all other subconscious blocks." } } }arguments 13 linespenny_edit changes data auth-required never probed
When the user corrects something on file, or a task, tracker, skill, or block needs to change, edit the existing item rather than writing a duplicate. Modify what already exists; entityType uses the same taxonomy as penny_write (see ladder). Notes: updates[] patch/replace, max100. Tasks: taskId; cancel via status:canceled, never Trash. Profile: blockName + content upsert; memory_policy and persona hold standing instructions. When the user tells you what to save, skip, check, or surface, update their memory_policy block in the same turn as a general rule in their words. Skill redefinition prepares a preview, not a save; wait for user approval before op:apply with proposalId. cancel discards; undo recovers the prior version if no later edit exists. skills/history supplies historyId; restore_revision with skillId/historyId/expectedUpdatedAt previews recovery. restore with skillId recovers deleted skills disabled. No invocation waiting period. Trackers: trackerId + sparse name/description/unit/kind/targetSpec/archived; retire by archiving, no delete. Private trackers only; workspace trackers unsupported. Rhythms: full manifest. skill_run/rhythm_run: complete runId + status. Projects: projectId + expectedRevision + operationId + sparse patch; reread and reconcile on conflict. restore_revision restores fields/resourceIds from historyId as a new revision. Tracker entries: trackerId + entryId + expectedUpdatedAt + full payload. restore un-trashes note/tracker_entry ids or Project projectId. When the user asks to go off the record, `entityType: "session"` + `record: "off"` + the `sessionId` from `<mypenny-session>` stops this session's transcript reaching Penny and drops what wasn't processed yet; it can't be undone for the session.
{ "type": "object", "required": [ "entityType" ], "properties": { "op": { "enum": [ "restore", "restore_revision", "apply", "cancel", "undo" ], "type": "string", "description": "restore: un-trash notes/tracker entries by ids." }, "ids": { "type": "array", "items": { "type": "string" }, "description": "restore: IDs to un-trash; max 100." }, "goal": { "type": "string", "description": "rhythm: required run instructions; skill uses instructions instead." }, "kind": { "type": "string", "description": "tracker: habit|metric|goal|log|status|custom." }, "name": { "type": "string", "description": "area/project/tracker: name. entityType:\"skill\": previews replacement; rhythm: upserts." }, "unit": { "type": "string", "description": "tracker: unit of measure." }, "actor": { "type": "string", "description": "task/area/project/heading: actor (me|agent) recorded in activity ledger." }, "notes": { "type": "string", "description": "task/area/project: markdown body." }, "order": { "type": "number", "description": "task/area/project/heading: sort order." }, "orgId": { "type": "string", "description": "area/project/heading: required container ID to update." }, "owner": { "enum": [ "me", "agent", "unassigned" ], "type": "string", "description": "task: assignee." }, "patch": { "type": "object", "description": "Project patch: full schema on penny_write." }, "runId": { "type": "string", "description": "skill_run/rhythm_run: required run ID to complete." }, "scope": { "enum": [ "global", "workspace", "private" ], "type": "string", "description": "Profile: global|workspace. Projects: private; workspace requires workspaceId." }, "title": { "type": "string", "description": "task/heading: title/label." }, "areaId": { "type": "string", "description": "project: parent area." }, "fields": { "type": "array", "items": { "type": "string" }, "description": "Restore selection: field names or step:<stepId>; fields/resourceIds required." }, "record": { "enum": [ "off" ], "type": "string", "description": "entityType:\"session\" (required) — \"off\". One-way: there is no way back on for the session." }, "status": { "type": "string", "description": "task: open|in_progress|done|canceled. Repeating completion returns nextTaskId: act on that new occurrence; the completed ID rejects further status writes. skill_run/rhythm_run: done|error|skipped." }, "taskId": { "type": "string", "description": "task: ID to update." }, "whenAt": { "type": "number", "description": "task/project: schedule date (ms epoch)." }, "content": { "type": "string", "description": "profile: required new block content." }, "deliver": { "type": "object", "description": "entityType:\"skill\": required with trigger; rhythm: required. Omit for on-demand. Shape: penny_write." }, "enabled": { "type": "boolean", "description": "skill: false pauses due signals, true resumes; requires skillId. Penny does not run skills." }, "entryId": { "type": "string" }, "payload": { "type": [ "object", "string" ] }, "posture": { "type": "string", "description": "entityType:\"skill\" with trigger, or rhythm: read|propose|act." }, "skillId": { "type": "string", "description": "skill: ID required with enabled to pause/resume." }, "trigger": { "type": "object", "description": "entityType:\"skill\": optional; rhythm: required. Omit to return to on-demand. Penny does not run it; connected agents receive due signals. Shape: penny_write. ALWAYS set IANA timezone; default UTC." }, "updates": { "type": "array", "items": { "type": "object", "required": [ "memoryId", "mode" ], "properties": { "mode": { "enum": [ "patch", "replace" ], "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } }, "content": { "type": "string", "description": "Required for patch." }, "memoryId": { "type": "string" }, "supersededBy": { "type": "string", "description": "replace: required replacement note ID." }, "expectedUpdatedAt": { "type": "number" } } }, "maxItems": 100, "description": "note: patch or supersede up to 100 existing notes." }, "archived": { "type": "boolean", "description": "Area/project/tracker: archive; false reactivates. Tracker definitions retire only this way." }, "deadline": { "type": "number", "description": "task/project: hard due date (ms epoch)." }, "snapshot": { "enum": [ "before", "after" ], "type": "string", "description": "skill restore_revision: history side; default before. after recovers an undone change." }, "agentNote": { "type": "string" }, "blockName": { "type": "string", "description": "profile: required block to upsert." }, "dependsOn": { "type": "array", "items": { "type": "string" }, "description": "task: full prerequisite taskId set; replaces all." }, "historyId": { "type": "string", "description": "restore_revision: Project/skill history ID. Skill restore previews; requires skillId and expectedUpdatedAt." }, "linkNotes": { "type": "array", "items": { "type": "string" }, "description": "task: note IDs to link." }, "projectId": { "type": "string", "description": "heading: required parent Project." }, "sessionId": { "type": "string", "description": "entityType:\"session\" — the transcript session to take off the record, from <mypenny-session>; omit when the host gives none." }, "trackerId": { "type": "string", "description": "tracker: required ID to update; only supplied fields change." }, "entityType": { "enum": [ "profile", "task", "area", "project", "heading", "tracker", "rhythm", "rhythm_run", "skill", "skill_run", "note", "tracker_entry", "session" ], "type": "string", "description": "Item type." }, "proposalId": { "type": "string", "description": "Returned skill proposal. apply commits after user review; cancel discards; undo restores the previous version only if no later edit exists." }, "provenance": { "type": "object", "properties": { "reads": { "type": "array", "items": { "type": "string" } }, "writes": { "type": "array", "items": { "type": "string" } }, "summary": { "type": "string" }, "delivered": { "type": "string" }, "outsideWorld": { "type": "array", "items": { "type": "string" } } }, "description": "rhythm_run: accountability summary (IDs/labels, never full content)." }, "recordedAt": { "type": "number" }, "recurrence": { "type": "object", "required": [ "cadence" ], "properties": { "at": { "type": "string", "description": "task: set/change recurrence; shape as penny_write. clearFields:[\"recurrence\"] ends the series, preserving history; target currentOccurrenceId." }, "cadence": { "enum": [ "daily", "weekly", "monthly" ], "type": "string" }, "timezone": { "type": "string", "description": "IANA timezone (e.g. America/New_York)." } }, "description": "task: set/change recurrence. clearFields:[\"recurrence\"] ends the series, making the task one-off and preserving completed history. Target currentOccurrenceId, not a stale/completed ID." }, "targetSpec": { "type": "object", "description": "tracker: replaces the whole target spec; shape as penny_write." }, "whenBucket": { "enum": [ "anytime", "someday" ], "type": "string", "description": "task/project: undated bucket; mutually exclusive with whenAt." }, "clearFields": { "type": "array", "items": { "enum": [ "whenAt", "whenBucket", "deadline", "projectId", "headingId", "recurrence" ], "type": "string" }, "description": "task: optional fields to unset." }, "description": { "type": "string", "description": "entityType:\"skill\"/rhythm: required use-when description. tracker: meaning; log trackers must document payload shape." }, "operationId": { "type": "string", "description": "Project receipt key; identical retries only." }, "resourceIds": { "type": "array", "items": { "type": "string" }, "description": "Restore selected links." }, "taskUpdates": { "type": "array", "items": { "type": "object" }, "maxItems": 100, "description": "task: edits, each {taskId, ...task fields} except card. All are checked first; one bad item saves none." }, "instructions": { "type": "string", "description": "skill: required saved know-how; replaces rhythm goal." }, "retrievalPlan": { "type": "array", "description": "entityType:\"skill\"/rhythm: optional deterministic steps for a bounded tier." }, "expectedRevision": { "type": "number", "description": "Project revision from Brief; reconcile conflicts." }, "expectedUpdatedAt": { "type": "number", "description": "Source version from read." } } }arguments 392 linespenny_write changes data auth-required never probed
Save the moment something durable emerges — a decision, preference, plan, correction, a to-do, a measurement, or something you produced — mid-conversation and unprompted; when the call is close, save. Choose entityType: walk this ladder, first match wins: 1. Durable fact about the user or their people → update the profile (profile upsert or penny_edit), not a note. How they want to be remembered → memory_policy, a general rule in their words; how they want you to show up (tone/register/manner) → persona. When the user tells you what to save, skip, check, or surface, update their memory_policy block in the same turn as a general rule in their words. 2. Commitment/action with a done-state → task. Organize via area/project/heading. A to-do the user mentions, even in passing, is a task: offer to capture it, then write it. Project create: patch.name/purpose + operationId; revise: projectId + expectedRevision from Brief + sparse patch (max 25 step/resource changes). project_interaction records actor proposals/declines/deferrals. pending_share_approval is a proposal, not a save. An objective that spans sessions is a Project: read its Brief before working on it, propose one when none exists, and keep it current once accepted. 3. Measurement → tracker_entry for an existing tracker (check inventory); otherwise propose tracker first. Active duplicate tracker names are rejected; edit with penny_edit. A measurement the user would log more than once is a tracker entry; if no tracker fits, propose one before logging. 4. Reusable know-how → skill; trigger makes it scheduled (legacy rhythm). Existing skill names prepare a preview; wait for user approval before penny_edit op:apply with proposalId. Run on-demand via skill_invoke; begin scheduled runs via skill_run. Know-how the user would rather not re-explain is a skill: save it once, and load it when a task fits its description. 5. Other context/events/ideas/learning → note. Prefer a specific type when unsure; a note is the fallback, not the default. When the user is learning something to keep, offer to let them try first; if search shows they asked before, say so once with the date; save misses and level. If so, read penny_get_skill references/learning.md. Also tag_relation and tracker_note_link. Batch notes or tracker_entry entries: max100. Modify existing items with penny_edit; trash with penny_delete. Reuse an existing tag before minting a new one. Tagging and linking conventions live in the Penny skill. Note confidence measures signal, not pipeline: 0.95 = explicit user statement; 0.80 = confirmed decision; 0.60 = reasonable inference; 0.40 = hedged or sleeptime-derived; 0.20 = weak signal. Each note needs sampleQuestions: exactly three short, distinct natural-language questions derived from its content, in the user's voice, not keywords or near-duplicates. For an APA preference: ["What citation style should I use for the paper?", "How should I format references in my thesis?", "What’s my usual academic style?"].
{ "type": "object", "required": [ "entityType" ], "properties": { "goal": { "type": "string", "description": "rhythm: required run instructions; skill uses instructions instead." }, "kind": { "type": "string", "description": "tracker: required; habit|metric|goal|log|status|custom." }, "name": { "type": "string", "description": "Required: tracker/area/project/rhythm and entityType:\"skill\". skill_invoke/skill_run: alternative to skillId. Existing skill names preview changes; new names create. Active tracker duplicates are rejected; archived names reactivate." }, "tags": { "type": "array", "items": { "type": "string" }, "description": "task: tags to attach." }, "unit": { "type": "string", "description": "tracker: unit of measure." }, "actor": { "type": "string", "description": "task/area/project/heading: actor (me|agent) recorded in activity ledger." }, "child": { "type": "string", "description": "tag_relation: required child tag." }, "notes": { "type": [ "array", "string" ], "description": "note: array (max 100), each requires content and confidence (0–1), plus tags and exactly 3 sampleQuestions in the user’s voice; optional source/memoryType (episodic|semantic|procedural)/validFrom. task/area/project: markdown string." }, "order": { "type": "number", "description": "task/area/project/heading: sort order." }, "owner": { "enum": [ "me", "agent", "unassigned" ], "type": "string", "description": "task: assignee." }, "patch": { "type": "object", "properties": { "name": { "type": "string" }, "notes": { "type": "string" }, "order": { "type": "number" }, "steps": { "type": "array", "items": { "type": "object", "required": [ "op", "stepId" ], "properties": { "op": { "enum": [ "suggest", "edit", "dismiss", "accept" ], "type": "string" }, "text": { "type": "string" }, "order": { "type": "number" }, "stepId": { "type": "string" } } }, "maxItems": 25, "description": "accept turns a saved suggestion into a To-do." }, "areaId": { "type": [ "string", "null" ] }, "status": { "enum": [ "active", "paused", "done", "canceled" ], "type": "string" }, "whenAt": { "type": [ "number", "null" ] }, "purpose": { "type": "string" }, "archived": { "type": "boolean" }, "deadline": { "type": [ "number", "null" ] }, "progress": { "type": "string" }, "resources": { "type": "array", "items": { "type": "object", "required": [ "op" ], "properties": { "op": { "enum": [ "attach", "suggest", "remove", "restore" ], "type": "string" }, "url": { "type": [ "string", "null" ] }, "role": { "enum": [ "reference", "method" ], "type": "string" }, "label": { "type": [ "string", "null" ] }, "reason": { "enum": [ "created_for", "deliberately_used", "suggested" ], "type": "string" }, "source": { "type": "object", "required": [ "kind", "id", "scope" ], "properties": { "id": { "type": "string" }, "kind": { "enum": [ "note", "task", "tracker", "tracker_entry", "skill", "profile_block", "external" ], "type": "string" }, "scope": { "type": "object", "required": [ "kind" ], "properties": { "kind": { "enum": [ "private", "workspace" ], "type": "string" }, "orgId": { "type": "string" }, "workspaceId": { "type": "string" } } } } }, "resourceId": { "type": "string" } } }, "maxItems": 25, "description": "Attach created_for/deliberately_used sources; otherwise suggest. Removed links need restore; links do not share source content." }, "checkpoint": { "type": "string", "description": "Factual handoff: changes, unfinished work, next step (4 KiB)." }, "whenBucket": { "enum": [ "anytime", "someday", null ], "type": [ "string", "null" ] }, "instructions": { "type": "string" } }, "description": "Project: sparse changes; omitted fields stay. Max 25 step/resource changes.", "additionalProperties": false }, "scope": { "enum": [ "global", "workspace", "private" ], "type": "string", "description": "Profile: global|workspace. Projects: private; workspace requires workspaceId." }, "title": { "type": "string", "description": "task/heading: required title/label." }, "areaId": { "type": "string", "description": "project: required parent area." }, "parent": { "type": "string", "description": "tag_relation: required parent tag of child_of edge." }, "source": { "type": "string", "description": "note/tracker_entry: provenance; defaults conversation/agent-mcp respectively." }, "status": { "enum": [ "open", "in_progress", "done", "canceled" ], "type": "string", "description": "task: initial status." }, "whenAt": { "type": "number", "description": "task/project: schedule date (ms epoch)." }, "content": { "type": "string", "description": "profile: required block content." }, "deliver": { "type": "object", "description": "entityType:\"skill\": required with trigger; rhythm: required. Omit for on-demand. Scheduled output: {kind:'note',tags?:string[]}|{kind:'profile_block',blockName:string}|{kind:'notify'}." }, "entries": { "type": "array", "description": "tracker_entry: up to 100 for one trackerId; each {payload,loggedAt?,agentNote?,noteIds?,source?,metadata?,externalId?}. Mutually exclusive with top-level payload. Receipts list saved/failed items and duplicates for stored externalIds; do not claim all saved from a partial result." }, "noteIds": { "type": "array", "items": { "type": "string" }, "description": "tracker_entry: archival note IDs to attach. tracker_note_link: required note IDs to link." }, "payload": { "type": "object", "description": "tracker_entry: tracker-defined data point; required unless entries is used." }, "posture": { "type": "string", "description": "entityType:\"skill\" with trigger, or rhythm: read|propose|act; default read." }, "skillId": { "type": "string", "description": "skill_invoke/skill_run: skill to run now/begin; required unless name is given." }, "trigger": { "type": "object", "description": "entityType:\"skill\": optional; rhythm: required. Requires deliver. Penny does not run it; due signals reach the connected agent. Schedule: {kind:\"schedule\",cadence:\"daily\"|\"weekly\"|\"monthly\",at?:\"Fri 16:00\",timezone?:\"America/Denver\"}. ALWAYS set IANA timezone; default UTC shifts local times. Event: {kind:\"event\",on:\"note.created\",where?:{tags?:string[]}}." }, "deadline": { "type": "number", "description": "task/project: hard due date (ms epoch)." }, "rhythmId": { "type": "string", "description": "rhythm_run: rhythm to begin; or pass name." }, "agentNote": { "type": "string", "description": "tracker_entry, single only: short non-searchable caption." }, "blockName": { "type": "string", "description": "profile: required block name to upsert." }, "dependsOn": { "type": "array", "items": { "type": "string" }, "description": "task: full prerequisite taskId set; replaces all." }, "headingId": { "type": "string", "description": "task: parent heading." }, "linkNotes": { "type": "array", "items": { "type": "string" }, "description": "task: note IDs to link." }, "projectId": { "type": "string", "description": "task: parent Project. heading: required parent Project." }, "reasoning": { "type": "string", "description": "tag_relation: short edge justification, typically a user quote." }, "trackerId": { "type": "string", "description": "tracker_entry: required tracker to log against." }, "entityType": { "enum": [ "profile", "task", "area", "project", "project_interaction", "heading", "tracker", "tracker_entry", "rhythm", "rhythm_run", "skill", "skill_invoke", "skill_run", "tag_relation", "tracker_note_link", "note" ], "type": "string", "description": "What to create; first match in the tool description's ladder wins." }, "externalId": { "type": "string", "description": "tracker_entry, also entries items: source record ID, max 200 chars. Use for imports/sync: repeats on the same tracker return the existing entry as duplicate. Opaque, unencrypted: never include content." }, "recordedAt": { "type": "number", "description": "tracker_entry, single only: observation time (ms epoch); default now." }, "recurrence": { "type": "object", "required": [ "cadence" ], "properties": { "at": { "type": "string", "description": "daily: HH:MM; weekly: <Wd> HH:MM; monthly: DD HH:MM." }, "cadence": { "enum": [ "daily", "weekly", "monthly" ], "type": "string" }, "timezone": { "type": "string", "description": "IANA timezone (e.g. America/New_York)." } }, "description": "task: repeat. Returned taskId is the first occurrence; completion returns nextTaskId (see penny_edit status). Never reuse a completed occurrence's ID." }, "targetSpec": { "type": "object", "description": "tracker: JSON target spec, interpreted at retrieval (e.g. {kind:'daily_minimum',value:10000})." }, "whenBucket": { "enum": [ "anytime", "someday" ], "type": "string", "description": "task/project: undated bucket; mutually exclusive with whenAt." }, "description": { "type": "string", "description": "tracker: required meaning. entityType:\"skill\"/rhythm: required one-line purpose, including on-demand skills." }, "interaction": { "type": "object", "required": [ "kind", "state" ], "properties": { "kind": { "enum": [ "proposal", "attention" ], "type": "string" }, "state": { "enum": [ "proposed", "declined", "deferred", "presented", "dismissed", "accepted" ], "type": "string" }, "taskId": { "type": "string" }, "content": { "type": "string", "description": "Rationale required for reconsideration." }, "eventKey": { "type": "string" }, "objective": { "type": "string", "description": "First proposal objective." }, "reconsider": { "type": "boolean" }, "urgencyKey": { "type": "string" }, "deferredUntil": { "type": "number" }, "expectedUpdatedAt": { "type": "number" } }, "description": "project_interaction: actor decision; read first, update with expectedUpdatedAt." }, "operationId": { "type": "string", "description": "Project receipt key; identical retries only." }, "instructions": { "type": "string", "description": "skill: required know-how for invocation or when a connected agent picks up a due skill. Replaces rhythm goal." }, "retrievalPlan": { "type": "array", "description": "entityType:\"skill\"/rhythm: optional deterministic steps [{tool,args}] for a bounded tier." }, "trackerEntryId": { "type": "string", "description": "tracker_note_link: required entry to attach notes to." }, "expectedRevision": { "type": "number", "description": "Project revision from Brief; reconcile conflicts." }, "expectedUpdatedAt": { "type": "number", "description": "Source version from read." } } }arguments 528 linespenny_delete changes data auth-required never probed
Move to Trash. Project: projectId + expectedRevision + operationId; penny_edit op:restore recovers. Repeat in_progress with the same operationId; report partial_recovery conflicts. Note/tracker_entry: ids (max100); skill/rhythm: one id; profile_block: ids are block names. Tag/link removal uses the identifiers below. Tasks are canceled via penny_edit; tracker definitions are archived, not deleted.
{ "type": "object", "required": [ "entityType" ], "properties": { "ids": { "type": "array", "items": { "type": "string" }, "description": "note/tracker_entry: IDs to trash, max 100. rhythm/skill: exactly one ID. profile_block: block names to trash." }, "tagA": { "type": "string", "description": "tag_relation: required edge endpoint to remove." }, "tagB": { "type": "string", "description": "tag_relation: required other endpoint." }, "scope": { "enum": [ "global", "workspace", "private" ], "type": "string", "description": "Profile block scope; Project private overrides defaults, workspace requires workspaceId." }, "noteIds": { "type": "array", "items": { "type": "string" }, "description": "tracker_note_link: required note IDs to unlink." }, "projectId": { "type": "string" }, "entityType": { "enum": [ "project", "note", "tracker_entry", "rhythm", "skill", "profile_block", "tag_relation", "tracker_note_link" ], "type": "string", "description": "What to trash." }, "operationId": { "type": "string" }, "trackerEntryId": { "type": "string", "description": "tracker_note_link: required entry to detach notes from." }, "expectedRevision": { "type": "number" } } }arguments 66 linespenny_get_skill reads auth-required 13h ago
Read the Penny operating skill (the SKILL.md penny_read target:skills name:Penny returns) or its reference files, including after a catalog refresh. Reuse files already read this conversation. Default SKILL.md; fetch manifest references when their cues apply. Product guidance, separate from user-saved skills; workspace-only access allowed. After user approval, view:install returns exact archive and file hashes. Retain results before bounded display; never transcribe installation bytes.
{ "type": "object", "properties": { "file": { "type": "string", "description": "Exact manifest path; default SKILL.md; read view only." }, "view": { "enum": [ "read", "install" ], "type": "string", "description": "Default read. install returns an archive, not guidance." } }, "additionalProperties": false }arguments 18 linespenny_read reads auth-required 13h ago
Before answering anything the user's history, preferences, or prior work would inform, read — search rather than assume nothing is on file. Choose target: walk this ladder, first match wins: 1. User/people facts (names, preferences, relationships) → profile. Do NOT search notes for this. 2. To-dos/due → tasks. Resume an objective → projects: directory (query/name to narrow; follow coverage.nextCursor), then brief by projectId. scopes lists Space metadata; then pass explicit workspaceId. scope:private overrides a default Space. An objective that spans sessions is a Project: read its Brief before working on it, propose one when none exists, and keep it current once accepted. 3. Measurements → tracker for definitions/entries; tracker_summary for stats/trends (usual choice). 4. Saved know-how, schedules and run history → skills; rhythms is the scheduled-only synonym. Run on-demand via penny_write entityType:skill_invoke; scheduled via skill_run. Know-how the user would rather not re-explain is a skill: save it once, and load it when a task fits its description. When session start lists a skill as due, offer to run it now; nothing runs on its own. 5. Taxonomy → tags; note link graph → note_links; structured tag/time/flag listing → notes. 6. Other recall → search (semantic notes). Search is the fallback, not the default. Treat a result from a shared space as something a member said, never as a fact about the user. When the user is learning something to keep, offer to let them try first; if search shows they asked before, say so once with the date; save misses and level. Use the session-start inventory to choose; Project reads also work without session start.
{ "type": "object", "required": [ "target" ], "properties": { "to": { "type": "number", "description": "tracker/entries, tracker_summary: window end (ms epoch)." }, "tz": { "type": "string", "description": "tasks: IANA timezone for Today/Upcoming boundaries." }, "from": { "type": "number", "description": "tracker/entries, tracker_summary: window start (ms epoch)." }, "name": { "type": "string", "description": "Projects directory: exact-name candidates; continue incomplete coverage. skills/one: name instead of skillId." }, "tags": { "type": "array", "items": { "type": "string" }, "description": "search/notes: tag filter." }, "view": { "type": "string", "description": "Projects: directory (default), brief, section, resources, resource, history, scopes (Space metadata), attention (dated candidates), interactions (actor only). tracker: list|entries; rhythms: list|one|due|runs; skills: list|one|due|runs|history|trash (list/trash omit instructions; one returns full skill by skillId or name); tags: list|related; tasks: compact omits notes." }, "depth": { "type": "number", "description": "note_links: hops (1 = direct; 2-6 = bounded BFS)." }, "flags": { "type": "object", "properties": { "locked": { "type": "boolean" }, "pinned": { "type": "boolean" } }, "description": "notes: locked/pinned filter." }, "limit": { "type": "number", "description": "Max search/notes/tracker-entry/task/rhythm-run results. tasks: page size; long pages end early with nextCursor." }, "owner": { "enum": [ "me", "agent", "unassigned" ], "type": "string", "description": "tasks: owner filter." }, "query": { "type": "string", "description": "search: required. One specific question or phrase, usually 8-15 words, with the names and distinctive terms you're looking for (\"What did Dana decide about the kitchen remodel budget?\", not \"budget\" or a paragraph); perfect grammar isn't needed; don't pad a short question; on a miss, search again with different terms, not a longer query. projects directory: name/purpose filter; check coverage." }, "scope": { "enum": [ "private", "workspace" ], "type": "string", "description": "Projects: private overrides defaults; workspace requires workspaceId." }, "areaId": { "type": "string", "description": "tasks: area filter; also applies to organize:project." }, "bucket": { "enum": [ "today", "upcoming", "anytime", "someday" ], "type": "string", "description": "tasks: schedule bucket filter." }, "cursor": { "type": "string", "description": "projects/tasks: prior nextCursor; keep the same filters. tasks: a page can be short and still have one; read until a reply has none." }, "status": { "enum": [ "open", "in_progress", "done", "canceled", "active", "paused" ], "type": "string", "description": "tasks: status filter." }, "target": { "enum": [ "profile", "projects", "tasks", "tracker", "tracker_summary", "rhythms", "skills", "tags", "note_links", "notes", "search" ], "type": "string", "description": "What to read; first match in the tool description's ladder wins." }, "taskId": { "type": "string", "description": "tasks: full detail. A repeating task returns seriesId/currentOccurrenceId; act on the current occurrence, not a completed ID." }, "blocked": { "type": "boolean", "description": "tasks: only tasks with unmet dependsOn." }, "section": { "enum": [ "purpose", "progress", "resources", "plan", "instructions" ], "type": "string", "description": "projects/section: one Brief section." }, "seedIds": { "type": "array", "items": { "type": "string" }, "description": "note_links: required starting note IDs." }, "skillId": { "type": "string", "description": "skills: required for one unless name is given; optional run scope for runs." }, "dateAxis": { "enum": [ "created", "valid" ], "type": "string", "description": "notes: timeRange axis; created = when written, valid = when the fact holds." }, "dueRange": { "type": "object", "properties": { "end": { "type": "number" }, "start": { "type": "number" } }, "description": "tasks: due-date window (ms epoch)." }, "eventKey": { "type": "string", "description": "Projects interactions: actor event key; omit to page." }, "maxDepth": { "type": "number", "description": "tags/related: maximum traversal depth." }, "maxNodes": { "type": "number", "description": "note_links: node cap for depth > 1; default 50." }, "organize": { "enum": [ "area", "project", "heading" ], "type": "string", "description": "tasks: list containers instead of tasks." }, "rhythmId": { "type": "string", "description": "rhythms: required for one; optional run scope for runs." }, "seriesId": { "type": "string", "description": "tasks: complete recurring-series history, newest first, including completed occurrences." }, "edgeTypes": { "type": "array", "items": { "type": "string" }, "description": "note_links: only follow/return these relationship types." }, "minWeight": { "type": "number", "description": "tags/related: minimum edge weight (default 0.4)." }, "orgStatus": { "enum": [ "active", "paused", "done", "canceled" ], "type": "string", "description": "tasks organize:project: Project status filter." }, "projectId": { "type": "string", "description": "projects brief/section/resources/resource/history: required stable Project ID. tasks: Project filter or heading parent." }, "timeRange": { "type": "object", "properties": { "end": { "type": "number" }, "start": { "type": "number" } }, "description": "search/notes: time window (ms epoch)." }, "trackerId": { "type": "string", "description": "Required for tracker/entries and tracker_summary." }, "blockNames": { "type": "array", "items": { "type": "string" }, "description": "profile: exact block names." }, "confidence": { "type": "object", "properties": { "max": { "type": "number" }, "min": { "type": "number" } }, "description": "notes: confidence range." }, "ifRevision": { "type": "string", "description": "profile: last-read revision; returns {unchanged:true} if unchanged." }, "projectKey": { "type": "string", "description": "profile: include subconscious:<projectKey>." }, "resourceId": { "type": "string", "description": "Projects resource: read the authorized current source." }, "enabledOnly": { "type": "boolean", "description": "rhythms/list: only enabled rhythms." }, "resourceState": { "enum": [ "attached", "suggested", "removed" ], "type": "string" }, "graphTraversal": { "type": "boolean", "description": "search: opt into tag/link graph expansion (default false; measured recall loss). Use only for deliberate graph exploration." }, "includeArchived": { "type": "boolean", "description": "Include archived trackers, Projects, or task containers." }, "includeCompleted": { "type": "boolean", "description": "tasks: include done/canceled; default false. An explicit status wins." }, "includeRelations": { "type": "boolean", "description": "tags/list: include parents/children/synonyms." }, "legacyProjectKey": { "type": "string", "description": "profile: coding-plugin migration aid — the same repo's older key, served in place of subconscious:<projectKey> until that exists." } } }arguments 306 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id117c728ecd4deb40.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/117c728ecd4deb40/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/117c728ecd4deb40?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.