Skip to main content
Glama

MyPenny

penny_edit

DestructiveIdempotent

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 something that already exists in the user's memory, chosen by entityType — same taxonomy as penny_write (see its ladder). Notes take updates[] (patch or replace, up to 100); tasks require taskId (set status: "canceled" to remove a task — tasks are never trashed); profile blocks are upserts (blockName + content; memory_policy and persona are the two standing-instruction blocks — see penny_write's ladder). 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; op:cancel discards and op:undo recovers the previous version. Read skills view:history for version IDs; op:restore_revision with skillId, historyId, expectedUpdatedAt previews a restore. op:restore with skillId recovers a deleted skill, disabled. No invocation waiting period applies. Trackers take trackerId and patch only the fields you pass (name/description/unit/kind/targetSpec/archived — archiving is the retire path, there is no tracker delete; private trackers only, not yet workspace-shared ones); rhythms are re-defined by full manifest; entityType: "rhythm_run" completes a run (runId + status). Projects take projectId + expectedRevision + operationId + a sparse patch (reread and reconcile on conflict); op: "restore_revision" restores selected fields/resourceIds from a historyId as a new revision. Tracker entries take trackerId + entryId + expectedUpdatedAt + the full payload. op: "restore" un-trashes notes or tracker entries by ids, or a Project by projectId.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
opNoop:"restore" un-trashes notes or tracker entries by `ids`.
idsNoop:"restore" — ids to un-trash (max 100).
goalNoentityType:"rhythm" (required) — what the run should do. On entityType:"skill" this is `instructions`.
kindNoentityType:"tracker" — habit | metric | goal | log | status | custom.
nameNoArea/project/tracker name; entityType:"skill" names prepare a preview of the replacement (rhythm names upsert).
unitNoentityType:"tracker" — unit of measure.
actorNoentityType:"task"/"area"/"project"/"heading" — who took the action (me|agent), written to the activity ledger.
notesNoentityType:"task"/"area"/"project" — markdown body.
orderNoentityType:"task"/"area"/"project"/"heading" — sort order.
orgIdNoentityType:"area"/"project"/"heading" (required) — the container to update.
ownerNoentityType:"task" — assignee.
patchNoProject patch: full schema on penny_write.
runIdNoentityType:"skill_run" (required) — the run to complete; same field on the legacy "rhythm_run".
scopeNoProfile: global|workspace. Projects: private; workspace requires workspaceId.
titleNoentityType:"task"/"heading" — the title/label.
areaIdNoentityType:"project" — the area the project belongs to.
fieldsNoRestore selection: field names or step:<stepId>; fields/resourceIds required.
statusNotask: 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.
taskIdNoentityType:"task" (required) — the task to update.
whenAtNoentityType:"task"/"project" — schedule date (ms epoch).
contentNoentityType:"profile" (required) — the new block content.
deliverNoentityType:"skill": required with trigger (also rhythm); omit for on-demand. See penny_write for shape.
enabledNoentityType:"skill": false pauses due signals, true resumes; requires skillId. MyPenny does not run skills.
entryIdNo
payloadNo
postureNoentityType:"skill" with a `trigger` set (or legacy "rhythm") — read | propose | act.
skillIdNoentityType:"skill" pause/resume — the skill id (required with enabled).
triggerNoentityType:"skill": optional (required for rhythm). Omit to return to on-demand. MyPenny does not run it; the connected agent receives due signals. See penny_write for shape; ALWAYS set IANA timezone, default UTC.
updatesNoentityType:"note" — patch or supersede existing notes (up to 100).
archivedNoArea/project/tracker: archive; false reactivates. Tracker definitions retire only this way.
deadlineNoentityType:"task"/"project" — hard due date (ms epoch).
snapshotNoSkill restore_revision: which side of the history entry to restore (default before). Select after to recover a change that was undone.
agentNoteNo
blockNameNoentityType:"profile" (required) — the profile block to upsert.
dependsOnNoentityType:"task" — full replacement set of taskIds that must complete first.
historyIdNorestore_revision: Project history item or skill history item. Skill restoration prepares a preview; requires skillId and expectedUpdatedAt.
linkNotesNoentityType:"task" — note ids to link to this task.
projectIdNoentityType:"heading" (required) — the project the heading belongs to.
trackerIdNoentityType:"tracker" (required) — the tracker to update. Only the fields you pass are patched — omit any you don't want to change.
entityTypeYesItem type.
proposalIdNoSkill change proposal returned by an edit. op:apply commits after user review; cancel discards; undo restores the previous version if no later edit exists.
provenanceNoentityType:"rhythm_run" — accountability summary of what the run did (ids/labels, never full content).
recordedAtNo
recurrenceNoentityType:"task" — makes the task repeat, or (on an existing repeating task) changes its schedule. Setting `clearFields: ["recurrence"]` ENDS the series (task becomes a one-off; completed occurrences stay as history) but must target `currentOccurrenceId`, not a stale/completed id.
targetSpecNotracker: replaces the whole target spec; shape as penny_write.
whenBucketNoentityType:"task"/"project" — undated bucket; mutually exclusive with whenAt.
clearFieldsNoentityType:"task" — names of optional fields to UNSET on the task.
descriptionNoentityType:"skill": REQUIRED use-when description; also rhythm. tracker: meaning; log trackers must document payload shape.
operationIdNoProject receipt key; identical retries only.
resourceIdsNoRestore selected links.
instructionsNoentityType:"skill" (required) — the saved know-how (generalizes the rhythm "goal").
retrievalPlanNoentityType:"skill" (or legacy "rhythm") — OPTIONAL deterministic steps for a bounded tier.
expectedRevisionNoProject edit revision from Brief; reconcile conflicts.
expectedUpdatedAtNoSource version from the read.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with annotations already marking this as destructive and non-read-only, the description adds extensive behavioral detail: tasks are never trashed, tracker definitions are retired via archiving, skill edits produce a preview requiring approval before op:apply, op:undo restores the previous version, and restore operations un-trash or recover deleted skills. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and organized by entity type, and every sentence carries operational meaning, but it is a single long paragraph with no bullet structure. The front-loaded general rule helps, though readability would improve with formatting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 54-parameter, multi-entity edit tool with no output schema, the description is remarkably complete: it covers notes, tasks, profiles, skills, trackers, rhythms, projects, tracker entries, restore flows, approval gates, and conflict requirements. The only outsourced details are shapes explicitly deferred to penny_write's ladder.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 93%, but the description still adds meaning by explaining entity-specific semantics: notes use updates[] up to 100, tasks require taskId and use canceled to remove, profile blocks are upserts with memory_policy and persona as standing blocks, trackers patch only passed fields, and projects require expectedRevision plus operationId. It also points to penny_write for shared shapes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific instruction: when a user corrects something on file, edit the existing item rather than writing a duplicate, and states it modifies existing memory selected by entityType. This clearly differentiates from penny_write, which the text references for the taxonomy and creation-side shapes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger condition ('When the user corrects something... needs to change') and tells the agent to edit rather than write a duplicate, which implies penny_write is for new items. It does not explicitly enumerate when-not-to-use cases or name alternative tools like penny_delete, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources