Skip to content

Skills & Tools

Tools are the actions an agent can take. Moneypenny supports multiple tool sources and makes them all available through a single registry with unified policy, audit, and discovery.

Because Moneypenny exposes its full API through MCP, you can manage tools and skills conversationally from any MCP-compatible client (Claude Desktop, Cursor, etc.) or through the CLI.

Tool Sources

SourceDescriptionExamples
Built-inCompiled into the binaryfile_read, file_write, shell_exec
RuntimeOperate on the agent’s own databasememory_search, fact_add, job_create
MCPDiscovered from external MCP serversAny MCP-registered tool
JSUser-defined JavaScript in QuickJS sandboxCustom tools created at runtime

Tool Execution Lifecycle

Every tool call follows the same pipeline:

Tool call requested
→ Policy check (allow / deny / audit)
→ Pre-hooks (argument transformation or abort)
→ Dispatch (runtime → MCP → JS → builtin)
→ Post-hooks (output transformation)
→ Secret redaction
→ Audit log write
→ Result returned to agent

Runtime Tools

These tools let the agent operate on its own state:

ToolPurpose
memory_searchSearch across all memory stores
fact_addStore a new long-term fact
fact_updateUpdate an existing fact
fact_listList active facts
scratch_set / scratch_getSession-scoped working memory
knowledge_ingestIngest a document
knowledge_listList ingested documents
job_createCreate a scheduled job
job_list / job_pause / job_resumeManage jobs
policy_listList active policies
audit_querySearch the audit trail
web_searchSearch the public web

MCP Tools

If MCP servers are configured, tools are discovered automatically at startup:

[[agents.mcp_servers]]
name = "github"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]

Discovered tools appear in the agent’s tool list alongside built-in tools.

JS Tools (Agent-Created)

Agents can create their own tools at runtime using JavaScript:

Terminal window
echo '{"op":"js.tool.add","args":{
"name":"celsius_to_fahrenheit",
"description":"Convert Celsius to Fahrenheit",
"source":"function run(args) { return String(args.celsius * 9/5 + 32) + \" °F\"; }",
"parameters_schema":"{\"celsius\":\"number\"}"
}}' | mp sidecar

JS tools:

  • Execute in a QuickJS sandbox (not Node.js)
  • Are policy-gated and audited like any other tool
  • Persist in the agent’s database
  • Survive restarts
  • Sync across agents via CRDT

Managing JS Tools

Terminal window
echo '{"op":"js.tool.list","args":{}}' | mp sidecar
echo '{"op":"js.tool.delete","args":{"name":"celsius_to_fahrenheit"}}' | mp sidecar

Skills

Skills are reusable procedures stored in the agent’s database. They surface in retrieval when the agent encounters a relevant query:

Terminal window
echo '{"op":"skill.add","args":{
"name":"incident-triage",
"description":"Triage production incidents",
"content":"1) Check dashboards. 2) Escalate: on-call → lead → VP. ..."
}}' | mp sidecar
Terminal window
mp skill list

Skills track usage and success. High-performing skills surface more prominently in context assembly.

Tool Governance

Every tool call is subject to policy. Common patterns:

Terminal window
# Block shell access entirely
mp policy add --name "no-shell" --effect deny --action "call" --resource "shell_exec"
# Audit all web searches
mp policy add --name "audit-web" --effect audit --action "call" --resource "web_search"
# Allow only read-only tools for low-trust agents
mp policy add --name "read-only" --effect deny --actor "intern-bot" --action "call" --resource "file_write"