LeashIndex Get the report

Index / crm

io.github.nicolascroce/keepsake

io-github-nicolascroce-keepsake declares 89 capabilities across 89 tools, with 2 critical issues. One of them, no-revocation, is recorded for every server in the index because MCP has no field in which to declare a way to switch a tool off; a missing declaration is not evidence that the control is missing.

100/100 exposureHigh exposure

Manifest recorded 2026-11-02 from tools/list answered by the npm package keepsake-mcp@1.17.0 (published to npm as keepsake-mcp, listed in the official MCP registry as io.github.nicolascroce/keepsake 1.17.0), run in an isolated container with no network access and placeholder credentials. The date changes only when the manifest does. Not verified by a maintainer.

Issues

These describe what this server's manifest declares. A product can provide controls that MCP has no way to express — token revocation, an admin console, audit logs — and this page cannot see them. The absence of a declaration is not evidence that a control is absent.

critical · no-revocation · All 89 tools

89 of 89 tools declare no way for the customer to switch them off once granted. This applies to every tool because MCP has no field in which to declare a revocation mechanism; the product may provide one outside MCP that a manifest cannot show.

critical · irreversible-uncapped · 23 of 89 tools

23 tools are classified as irreversible or destructive and declare no limit. 22 of them are counted only because the server annotated them destructiveHint. In MCP that annotation marks a tool that may make destructive changes rather than only additive ones; it does not say the change cannot be undone.

high · no-expiry · All 89 tools

89 of 89 tools declare no expiry. This applies to every tool because MCP has no field in which to declare an expiry; the product may provide one outside MCP that a manifest cannot show.

high · no-audit-trail · All 89 tools

89 of 89 tools declare no record of their actions that the customer can read. This applies to every tool because MCP has no field in which to declare an audit requirement; the product may provide one outside MCP that a manifest cannot show.

high · uncapped-write · 37 of 89 tools

37 tools can modify data and declare no limit.

low · uncapped-read · 29 of 89 tools

29 tools can read data and declare no limit.

Declared capabilities

How each tool was read. declared means the server's own annotation said so — self-reported and unverified. inferred is from the tool's name. assumed means nothing indicated either way.

ToolRead asBasis
list_contactsread declared
get_contactread declared
create_contactwrite inferred
update_contactwrite inferred
delete_contactdestructive declared
search_contactsread declared
list_companiesread declared
get_companyread declared
create_companywrite inferred
update_companywrite inferred
delete_companydestructive declared
link_contact_companywrite assumed
unlink_contact_companydestructive declared
merge_companiesdestructive declared
search_companiesread declared
list_entriesread declared
create_entrywrite inferred
update_entrywrite inferred
delete_entrydestructive declared
list_tasksread declared
get_taskread declared
create_taskwrite inferred
update_taskwrite inferred
delete_taskdestructive declared
complete_taskwrite assumed
uncomplete_taskwrite assumed
snooze_taskwrite assumed
list_notesread declared
list_note_statusesread declared
get_noteread declared
create_notewrite inferred
update_notewrite inferred
delete_notedestructive declared
pin_noteread inferred
unpin_notewrite assumed
archive_notedelete inferred
restore_notewrite assumed
list_daysread declared
get_dayread declared
update_daywrite inferred
list_day_blocksread declared
create_day_blockwrite inferred
update_day_blockwrite inferred
delete_day_blockdestructive declared
list_recurring_blocksread declared
create_recurring_blockwrite inferred
update_recurring_blockwrite inferred
stop_recurring_blockdestructive declared
list_tagsread declared
get_tagread declared
get_tag_itemsread declared
create_tagwrite inferred
update_tagwrite inferred
delete_tagdestructive declared
link_tagwrite assumed
unlink_tagdestructive declared
list_task_headersread declared
get_task_headerread declared
create_task_headerwrite inferred
update_task_headerwrite inferred
delete_task_headerdestructive declared
link_note_contactwrite assumed
unlink_note_contactdestructive declared
link_entry_contactwrite assumed
unlink_entry_contactdestructive declared
link_task_contactwrite assumed
unlink_task_contactdestructive declared
link_entry_companywrite assumed
unlink_entry_companydestructive declared
link_task_companywrite assumed
unlink_task_companydestructive declared
link_note_companywrite assumed
unlink_note_companydestructive declared
link_task_notewrite assumed
unlink_task_notedestructive declared
link_noteswrite assumed
unlink_notesdestructive declared
link_note_datewrite assumed
unlink_note_datedestructive declared
get_contact_timelineread declared
get_tasks_todayread declared
get_tasks_overdueread declared
get_changelogread declared
searchread declared
list_note_commentsread declared
create_note_commentwrite inferred
update_note_commentwrite inferred
delete_note_commentdestructive declared
get_agent_instructionsread declared
Answering this question about your own agent? The self-serve stack report applies the same reading to your own stack or server and gives you a dated document you can hand to a customer's security review. It is generated in your browser, with nobody to wait for. Buying one does not change this page, its score or its place in the index — see Independence.
Maintain this server? If this page misreads your manifest, or your server has changed, submit its current tools/list response and it will be re-scored and dated. Corrections are published alongside the original, not in place of it.