Skip to main content
Glama
ShellFrameAI

AgentSecure Community

Official

AgentSecure Community

By ShellFrame AI

PyPI CI License

Make credential-bearing HTTP(S) requests from Claude Code and Codex through MCP, using placeholders instead of raw credentials in project files and MCP responses.

AgentSecure imports dotenv secrets into a local vault, checks destinations, and injects credentials when sending approved requests. It is not an OS sandbox or a system-wide firewall: the local user and machine remain trusted.

Try it with a fake credential first

No API account, real credentials, or coding-agent installation is needed for this local MCP demo. With Python 3.8+ installed:

git clone https://github.com/ShellFrameAI/agentsecure-community.git
cd agentsecure-community
python3 examples/mcp_fake_secret_demo.py

The demo creates a temporary project and vault, imports a fake credential, and calls a loopback HTTP fixture through the actual MCP stdio server. It checks the result before printing:

Project file: DEMO_API_KEY=AGENTSECURE_ALIAS_DEMO_API_KEY
Approved fixture: received the fake credential
MCP response: Bearer [redacted]
Unapproved destination: blocked
Demo passed; temporary project and vault removed.

Only the temporary fixture policy permits loopback traffic. The demo does not change your project, client configuration, or normal vault, and does not contact an external API. This demonstrates the managed MCP flow, not isolation from an unrestricted process running as your local user.

AGENTSECURE_ALIAS_* values are non-secret project-file placeholders; ${DEMO_API_KEY} is the placeholder used in an MCP request. Neither is a real provider credential. Internal virt_* bindings are separate from these aliases.

Related MCP server: Janee

Why AgentSecure

AI coding agents can access .env files, shell environments, MCP configuration, and local credentials. Ignore files are not a security boundary. AgentSecure keeps real secrets outside the agent's normal project and MCP context.

Quick Start

After trying the demo, run these commands from the project you want to configure. You need Python 3.8+, uv, and your chosen coding-agent CLI. Use least-privilege development credentials. Before importing, review the vault and backup behavior: dotenv backups are plaintext, with owner-only permissions, under your home directory.

1. Install AgentSecure

uv tool install agentsecure

2. Optionally scan the project

agentsecure scan .

The scan is local and does not change the project.

3. Run guided setup once

For Claude Code:

agentsecure start --client claude

Follow the printed MCP configuration step, then start Claude Code normally:

claude

For Codex:

agentsecure start --client codex --install-mcp

Then start Codex normally:

codex

agentsecure start is guided one-time project setup. It initializes the project, offers to move .env secrets into the local vault, writes persistent agent guidance, and prints or installs the selected MCP configuration.

It is not a persistent background service. After setup finishes, start Claude Code or Codex normally. You do not normally wrap the agent with agentsecure run.

4. Verify a fresh agent session

Restart the coding agent after applying the MCP configuration. Ask it to inspect the AgentSecure setup and call agentsecure.policy.describe and agentsecure.secret.status without printing secret values. Confirm it sees the AgentSecure MCP tools. agentsecure doctor checks local setup, but does not prove that the client loaded MCP. Claude setup prints a configuration step; Codex setup above requests automatic MCP installation.

For a credential-bearing request, use agentsecure.http.request with a ${ENV_NAME} placeholder and an approved destination. Ordinary requests without secret placeholders should use the agent's normal networking tools. See the MCP usage guide.

How It Works

  1. During setup, real secrets are moved into the local AgentSecure vault.

  2. Project files receive aliases or safe placeholders instead of real values.

  3. The coding agent starts and runs normally.

  4. Secret-bearing requests use the AgentSecure MCP tool.

  5. AgentSecure validates the destination and injects the real secret while sending the request outside the agent's context.

Security Boundaries

AgentSecure helps protect against:

  • exposing raw secrets to the coding agent through the default MCP flow;

  • keeping real secrets in agent-readable project files;

  • sending protected secrets to destinations that are not approved by policy.

AgentSecure is not:

  • a complete operating-system sandbox;

  • a VM or container;

  • protection from an attacker who already controls the local user or machine;

  • a replacement for endpoint, identity, network, or cloud security controls.

The local user and machine remain inside the trust boundary. See the security model and limitations for the full threat model.

Documentation

License

Licensed under the Apache License 2.0. See LICENSE.

Available Tools

13 tools
agentsecure.audit_contextA

Inspect recent local Mesh history for troubleshooting messages, registrations, approvals, or policy denials. Returns an events array containing only mesh.* records from the configured audit log, optionally filtered by resource, with the last limit matches in log order (oldest first within that slice). A missing log returns an empty array and malformed JSON lines are skipped. Does not change state or include non-Mesh HTTP/secret audit events. Text fields may be redacted with summary/hash metadata; this is not an immutable audit service. Example: {"limit": 10}.

NameRequiredDescriptionDefault
limitNoNumber of most recent matching events to return; defaults to 50. Use a positive integer (values are converted with int); 0 returns all matches, not zero events.
resourceNoOptional filter, e.g. {"path": "src/app.py"}; defaults to {} (all Mesh events). Each key and stringified value must occur in serialized event details. This is substring matching, not exact structured matching.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses the return shape (events array), ordering semantics ('last limit matches in log order, oldest first within that slice'), edge-case behavior (missing log returns empty array, malformed JSON lines skipped), read-only nature, and two important caveats (redaction with summary/hash metadata, not an immutable audit service). That is unusually complete behavioral disclosure.

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

Conciseness5/5

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

Front-loads purpose, then return semantics, then edge cases, then caveats, then a minimal example. Every sentence adds information an agent would otherwise have to guess; nothing is repeated from the schema verbatim.

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?

Two optional parameters, no output schema, no annotations — and the description still covers purpose, filtering, ordering, paging behavior, error tolerance, and data-fidelity caveats. An agent can call this correctly and interpret the result without further information.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above that by clarifying that limit selects the last N matches and that ordering is oldest-first within the returned slice, which the schema does not state. It also confirms resource is an optional substring filter over serialized details, reinforcing the schema's caveat that it is not exact structured matching.

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?

States a specific verb ('Inspect') and resource ('recent local Mesh history') and enumerates the record types covered (messages, registrations, approvals, policy denials). It also explicitly scopes out what it does NOT return ('non-Mesh HTTP/secret audit events'), which separates it from siblings like check_messages, secret.status, and http.request.

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?

Frames the use case clearly as 'troubleshooting' and lists the event categories it covers, plus an explicit exclusion of non-Mesh HTTP/secret events. It stops short of naming an alternative tool to use for those other cases, so the agent must infer the routing from sibling names.

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

agentsecure.check_messagesA

Check local inbox counts before answering whether this agent has messages or approvals. Returns agent_id, unread_count, pending_approval_count, and a notice, not message content. Pending approvals are those assigned to the agent or its registered team, not all requests created by it. Does not mark messages read. Use agentsecure.list_messages for records and agentsecure.read_message to acknowledge one. Example: {"agent_id": "backend-agent"}.

NameRequiredDescriptionDefault
agent_idYesNon-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full load and does well: it names the exact return fields, declares the operation is non-mutating ('Does not mark messages read'), and clarifies a subtle scoping rule that pending approvals include those assigned to the agent or its registered team, not merely requests it created. It stops short of failure modes or cost/latency characteristics, which keeps it from a 5.

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

Conciseness5/5

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

Four short sentences, front-loaded with the purpose, followed by return shape, scoping caveat, side-effect disclaimer, alternatives, and an example. Every sentence contributes a distinct fact with no restatement of the tool name.

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?

There is no output schema, so the description must describe return values — and it enumerates them precisely. For a single-parameter read tool, an agent has everything needed to decide and invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds a concrete invocation example ({"agent_id": "backend-agent"}) and reinforces that this is a caller-supplied local label rather than a credential. That extra framing helps an agent pick the value to pass.

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?

Specific verb (check) plus resource (local inbox counts) with an explicit statement of what is and isn't returned: agent_id, unread_count, pending_approval_count, and a notice, 'not message content'. It also carves itself apart from agentsecure.list_messages and agentsecure.read_message by name, so no schema opening is needed to disambiguate.

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

Usage Guidelines5/5

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

States the triggering condition ('before answering whether this agent has messages or approvals') and routes to the two alternatives with their distinct purposes: list_messages for records, read_message to acknowledge one. Nothing about tool selection is left to inference.

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

agentsecure.get_approval_statusA

Read a previously created local approval without changing it. Returns an approval object with status (pending, approved, denied, or needs_info), action/resource, required_approver, and recorded decision details/timestamps. Reason text remains redacted with summary/hash metadata. Unknown IDs cause an error. This tool neither requests nor grants approval, and an approved record does not execute an action or automatically lift policy restrictions. Use agentsecure.request_approval to create a request and agentsecure.get_policy_hint to inspect current action policy.

NameRequiredDescriptionDefault
approval_idYesExact approval_id returned by request_approval (apr_...); non-empty and must exist in the local Mesh store.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: read-only semantics, the exact status vocabulary, that reason text is redacted to summary/hash, that unknown IDs error out, and critically that an approved record neither executes an action nor lifts policy restrictions. That last point preempts the most likely agent misinterpretation of an 'approved' status.

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 read-only scope and return shape are front-loaded, and all six sentences carry distinct information (return fields, redaction, errors, non-granting semantics, alternatives). It is slightly dense for a one-parameter read tool, but no sentence is filler.

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?

There is no output schema or annotations, so the description must explain return values and side-effect profile — it does both, including the enumerated status values and the caution that approval does not trigger execution. Nothing an agent needs in order to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single approval_id parameter is fully documented in the schema, so the baseline is 3. The description only reinforces the constraint by noting that unknown IDs cause an error; it adds no format or syntax details beyond the schema's 'apr_...' guidance.

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 uses a specific verb and resource ('Read a previously created local approval without changing it') and immediately enumerates the returned fields (status, action/resource, required_approver, decision details). It explicitly separates itself from agentsecure.request_approval and agentsecure.get_policy_hint, so an agent can choose without opening any sibling schema.

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

Usage Guidelines5/5

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

It names the alternatives and the condition that selects them: request_approval to create a request, get_policy_hint to inspect policy. It also states clear exclusions ('neither requests nor grants approval') so an agent cannot mistake this for a mutation or a policy-evaluation tool.

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

agentsecure.get_policy_hintA

Evaluate a proposed Mesh action against the current local agent policy without executing it. Checks cannot, can_message (when a send_message target is supplied), requires_human_for, and sensitive markers in action/resource. Returns allowed, blocked, reason, action, sanitized resource, and allowed_next_step. This is guidance, not an authorization token or a guarantee about external permissions; existing approval records are not consulted. Use agentsecure.request_approval to record a review request, or agentsecure.policy.describe for HTTP network/secret configuration. Example: {"agent_id": "frontend-agent", "action": "send_message", "target": "backend-agent"}.

NameRequiredDescriptionDefault
actionYesNon-empty action label matched against mesh.agents policy, e.g. send_message or deploy_preview. Action/resource text is also checked for sensitive markers such as deploy or secret.
targetNoRecipient agent ID for a send_message check; defaults to empty. Only used with action=send_message to check can_message restrictions; not a hostname or URL.
agent_idYesNon-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials.
resourceNoOptional resource metadata; defaults to {}. Stored/returned fields are limited to action, environment, id, path, provider, repo, team, and type. Use non-secret scalar values or lists; other keys and top-level object-valued fields are dropped; list items are converted to scalars, and strings are truncated/redacted. Example: {"type": "code_file", "path": "src/app.py"}. For policy checks, the entire supplied object is examined for sensitive-action markers.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so well: it discloses non-execution, local-policy scope, which policy checks are performed, the returned fields, and the important limitation that this is not an authorization token or a guarantee about external permissions.

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

Conciseness5/5

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

The purpose and critical non-execution scope are front-loaded, followed by checked conditions, return values, limitations, alternatives, and an example. The paragraph is dense but free of filler and appropriately sized for a policy-evaluation tool.

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?

Given no output schema and no annotations, the description supplies the missing context: it enumerates returned fields, states what is checked, and clarifies that existing approvals and external permissions are not covered. It is complete enough for an agent to invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is already 100%, so the schema documents parameter meanings in detail. The description still adds value with a concrete example and by tying target to the send_message check and noting that action/resource text is examined for sensitive markers.

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 states a specific verb and resource: evaluating a proposed Mesh action against the current local agent policy without executing it. It clearly distinguishes the tool from approval recording and network/secret policy inspection by naming those alternatives.

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

Usage Guidelines5/5

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

It explicitly frames the tool as guidance rather than authorization, notes that approval records are not consulted, and tells the agent to use agentsecure.request_approval for review requests or agentsecure.policy.describe for HTTP network/secret configuration. This gives clear alternatives and when-not-to-use guidance.

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

agentsecure.http.requestA

Send one HTTP(S) request that needs a configured secret, using ${ENV_NAME} placeholders instead of raw credentials. Checks project destination policy before resolving secrets and applies configured vault-alias host restrictions; calls without placeholders are blocked (use ordinary network tools for those). Performs the requested remote operation, does not follow redirects, and revokes temporary alias grants afterward. Returns blocked=false, status, reason, headers, and a UTF-8 body, with response body/header values sanitized for known secrets; HTTP error statuses are still responses. Blocked calls return blocked=true, reason, rule_id, and sometimes allow_command; configuration errors may instead be MCP errors. This is not a sandbox for other network tools. Example: {"url": "https://api.example.com/me", "headers": {"Authorization": "Bearer ${API_KEY}"}} requires that host and API_KEY to be configured and approved.

NameRequiredDescriptionDefault
ttlNoLifetime of temporary vault-alias grants; defaults to 2h. Positive integer plus optional s, m, h, or d (bare number means seconds), at most 24h, e.g. 30m. Grants are revoked after the request; this is not the HTTP timeout.
urlYesAbsolute http:// or https:// URL with a host approved by project policy. Placeholders may appear in the path/query, never the host or port. Prefer HTTPS.
bodyNoUTF-8 text request body, optionally containing placeholders; defaults to empty. Ignored when a non-null json payload is supplied.
jsonNoJSON-serializable request payload. When supplied and non-null, overrides body and sets the exact Content-Type header key to application/json unless already provided. Placeholders are replaced in string values, not object keys.
queryNoQuery name/value map appended to any URL query; defaults to {}. Values are stringified and URL-encoded; string values may contain placeholders. Arrays are not expanded into repeated parameters.
methodNoHTTP method, e.g. GET or POST; defaults to GET and is uppercased. Choose a method appropriate for the authorized operation.
headersNoHeader name/value map; defaults to {} and values are converted to strings. Put secret placeholders in values, e.g. {"Authorization": "Bearer ${API_KEY}"}.
verify_tlsNoWhether to verify HTTPS certificates; defaults to true. False disables verification and weakens protection; leave enabled for normal use. Has no effect on HTTP.
timeout_secondsNoConnection/socket timeout in seconds, not an overall task deadline. Use a positive number; omission or 0 uses 30 seconds.

TDQS

A4.6/5.0
Behavior5/5

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

With zero annotations the description fully carries the behavioral burden: destination-policy check ordering, vault-alias host restrictions, no redirect following, temporary grant revocation, secret sanitization of response bodies and headers, and the crucial semantic that HTTP error statuses are still returned as responses while config errors may surface as MCP errors. That is exactly the disclosure a mutation-capable network tool needs.

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?

Front-loaded with purpose and the blocking rule, and every clause carries distinct information (policy check, redirects, revocation, return shape, error semantics). It is a dense run-on paragraph that could be split for scanability, but little is genuinely wasteful for a 9-parameter tool.

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?

No output schema exists, yet the description enumerates both success (blocked=false, status, reason, headers, UTF-8 body) and blocked (blocked=true, reason, rule_id, allow_command) return shapes plus sanitization behavior. Combined with 100% schema coverage and a worked example, an agent has everything needed to call it and interpret results.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by demonstrating placeholder placement in headers with a concrete example and stating the approval requirement for both host and secret name. It adds interpretation (the operation is authorized only if host and secret are approved) rather than merely restating field types.

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?

States a specific verb+resource (send one HTTP(S) request) plus the defining constraint that distinguishes it from any other HTTP tool: it requires ${ENV_NAME} secret placeholders. The final clause explicitly disclaims being a sandbox for other network tools, so an agent can immediately tell this apart from ordinary fetch tools and the agentsecure.* siblings.

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?

Gives an explicit when-not rule ("calls without placeholders are blocked (use ordinary network tools for those)") and prerequisites (host and secret must be configured and approved). It does not route to a named sibling such as request_approval when a call comes back blocked, though the mention of allow_command hints at that path without stating it.

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

agentsecure.identityA

Look up or register identities in the local Community Mesh store. By default, agent_id returns exists plus that identity's metadata (or exists=false if unknown); omitting agent_id returns an agents array sorted by ID. Set register=true with a non-empty agent_id to create or overwrite its record and write an audit event; returns the saved identity. Registration replaces rather than merges metadata. Identity labels, trust_level, and allowed_scopes do not authenticate callers or grant permissions. Example: {"agent_id": "backend-agent"}.

NameRequiredDescriptionDefault
nameNoDisplay name for registration; defaults to agent_id. Ignored on lookup.
teamNoTeam label for registration; defaults to empty. Used when counting approvals assigned to this team; ignored on lookup.
typeNoAgent classification for registration; defaults to coding_agent. Metadata only; ignored on lookup.
ownerNoOwner label for registration; defaults to empty. Does not verify ownership; ignored on lookup.
agent_idNoLocal Mesh ID to look up or register. Omit/empty to list identities when register=false; non-empty required when register=true. Not inferred from the environment or authenticated.
registerNoDefaults to false (lookup only). True creates or overwrites the agent_id record using the metadata below, including defaults for omitted fields.
workspaceNoWorkspace label for registration; defaults to local. Does not select a filesystem directory; ignored on lookup.
trust_levelNoTrust label for registration; defaults to local. Metadata only, not a security boundary; ignored on lookup.
allowed_scopesNoScope labels to store at registration; defaults to []. Informational only, not enforced by Mesh policy; ignored on lookup.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so well: it discloses that lookup returns exists=false for unknown IDs, that the agents array is sorted by ID, that registration overwrites rather than merges, that an audit event is written, and that labels/scopes are not security boundaries. These are exactly the mutation and side-effect facts an agent needs.

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

Conciseness5/5

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

Front-loaded with purpose, then the default behavior, then the mutation mode, then a caveat, then an example. Every sentence carries distinct information and nothing is repeated from the schema verbatim.

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?

A 9-parameter tool with no annotations and no output schema, yet the description covers both return shapes (exists + metadata, agents array, saved identity), overwrite semantics, and the non-security nature of the stored metadata. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds conditional semantics beyond the field docs: omitting agent_id lists identities, non-empty agent_id is required for register, and defaults are applied to omitted fields on overwrite. The worked example reinforces the minimal lookup call.

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 verb pair and resource: 'Look up or register identities in the local Community Mesh store.' It also distinguishes the two operational modes by argument shape, so an agent can tell what the tool does without opening the schema.

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 explicitly states when each mode applies: default lookup when agent_id is supplied, listing when agent_id is omitted, and write when register=true with a non-empty agent_id. There are no sibling tools with overlapping identity duties, so no explicit alternates are needed, but it also doesn't mention prerequisites or error handling.

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

agentsecure.list_messagesA

List messages addressed to one agent in the local Community Mesh store. Returns agent_id and a messages array, newest first (empty if none). Each record includes message_id, sender/recipient, subject, resource, status, thread IDs, and timestamps. Body is [redacted]; body_summary may retain up to 120 characters and body_sha256 is a digest, not recoverable full content. Does not mark messages read. Use agentsecure.check_messages for counts only or agentsecure.read_message to mark a specific record read. Example: {"agent_id": "backend-agent", "include_read": true}.

NameRequiredDescriptionDefault
agent_idYesNon-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials.
include_readNoDefaults to false (unread only). True includes already-read messages as well; neither setting marks messages read.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses ordering (newest first), empty-result behavior, the redaction model (body [redacted], body_summary capped at 120 chars, body_sha256 is a non-recoverable digest), and the non-mutating guarantee. It omits any statement about result-count limits or pagination for large mailboxes, which is the remaining behavioral gap.

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?

Front-loaded with purpose, then return shape, then usage alternatives — a sensible order with no filler sentences. It runs slightly long, spending several clauses on redaction mechanics that could be compressed, but every sentence carries information.

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?

No output schema exists, so the description correctly spends its budget describing the returned fields (message_id, participants, subject, status, thread IDs, timestamps) and the redaction constraints an agent must respect. Combined with a 2-param schema at full coverage, nothing needed to call this correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so agent_id and include_read semantics (default false, unread only, neither setting marks read) are already fully documented in the schema. The description only adds a concrete example object, which is marginal value over structured fields — baseline 3 applies.

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?

Specific verb+resource ('List messages addressed to one agent in the local Community Mesh store') with explicit scope and return shape. It names the two sibling tools it is not (check_messages, read_message) and what each does instead, so an agent can pick without opening schemas.

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

Usage Guidelines5/5

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

Explicit routing: 'Use agentsecure.check_messages for counts only or agentsecure.read_message to mark a specific record read', plus the exclusion 'Does not mark messages read'. The when/when-not/alternative triple is fully covered, and an inline example call is provided.

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

agentsecure.policy.describeA

Inspect the current project's network rules and configured secret metadata before a secret-bearing HTTP request. Takes no arguments. Returns network (allowed domains/ports and IP restrictions), secret_aliases, project_bindings, and usage instructions; no secret values. Does not change policy or verify that credentials work. Use agentsecure.secret.status for one env name, or agentsecure.get_policy_hint for a Mesh action rather than HTTP destination policy.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations exist, so the description carries the full burden and does most of it: it declares the operation is read-only ('Does not change policy'), enumerates what is returned (network domains/ports, IP restrictions, secret_aliases, project_bindings, usage instructions), explicitly excludes secret values, and warns it does not verify credentials. The only gap is that it never mentions auth/permission requirements for reading policy.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the purpose and scope, then the return payload, then the negative behaviors, then the sibling routing. Every clause carries unique information; no filler.

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?

There is no output schema, so the description must describe the return shape, and it does so concretely (network allowlist, secret_aliases, project_bindings, usage instructions). Combined with the read-only caveat and exclusion of secret values, an agent has everything needed to call and interpret it.

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

Parameters4/5

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

Zero parameters, so the baseline is 4; the description reinforces this with 'Takes no arguments', confirming no scoping inputs are needed. There is no additional semantics to convey beyond that.

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?

Specific verb + resource + scope: 'Inspect the current project's network rules and configured secret metadata'. It also fixes the moment of relevance ('before a secret-bearing HTTP request'), which separates it from siblings like agentsecure.http.request or agentsecure.identity at a glance.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('before a secret-bearing HTTP request') and names two alternative tools with the exact condition that selects each ('secret.status for one env name', 'get_policy_hint for a Mesh action rather than HTTP destination policy'). Nothing is left to inference.

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

agentsecure.read_messageA

Retrieve and acknowledge one local Mesh message after listing the inbox. Requires agent_id to match the record's recipient; an unknown ID or a different recipient causes an error. Returns the message record with status=read and read_at; the first read updates local state and audit. Re-reading returns the same acknowledged record. Body remains [redacted], with only body_summary/body_sha256 available; this does not recover original text. Use agentsecure.list_messages to inspect without marking read. The recipient check compares caller-supplied IDs, not authenticated identities.

NameRequiredDescriptionDefault
agent_idYesNon-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials.
message_idYesExact message_id returned by list_messages or send_message. Unknown IDs cause an error.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses the recipient-match requirement, error conditions, local state plus audit update on first read, idempotent re-reads, redacted body behavior, and the critical caveat that the recipient check compares caller-supplied IDs rather than authenticated identities.

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

Conciseness5/5

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

The description is dense and front-loaded: purpose first, then prerequisites, then return/idempotency semantics, then redaction caveat, then the alternative tool. Every sentence adds distinct information.

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 two-parameter mutation tool with no annotations and no output schema, the description covers everything an agent needs: usage context, error behavior, return shape (status/read_at), idempotency, redaction constraints, and the audit implication.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3. The description adds value beyond the schema by stating that agent_id must match the record's recipient and by reinforcing that the check is against caller-supplied labels, not authenticated identities.

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?

States a specific verb and resource ('Retrieve and acknowledge one local Mesh message') plus the scope ('after listing the inbox') and the side effect (acknowledgement). This clearly distinguishes it from the read-only sibling list_messages.

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

Usage Guidelines5/5

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

Explicitly tells the agent to use agentsecure.list_messages to inspect without marking read, and describes the prerequisite of listing the inbox. The alternative and the condition that selects it are both stated.

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

agentsecure.reply_messageA

Reply to a local Mesh message addressed to from_agent. Marks the original read first, then checks send_message policy and creates a type=reply message to the original sender, preserving thread_id and resource and setting reply_to. Returns blocked=false and message, or a policy denial with blocked=true, reason, and allowed_next_step; the original can remain read even if sending is blocked. Unknown messages or recipient mismatches cause an error. Reply body is redacted with a summary/hash, not full-text delivery. Use agentsecure.send_message for a new thread.

NameRequiredDescriptionDefault
bodyYesReply text to summarize/hash; stored as [redacted] plus a heuristic summary of up to 120 characters and a digest. Do not include secrets.
from_agentYesNon-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials.
message_idYesExisting message_id addressed to from_agent. The reply goes to its original sender and reuses its thread and resource.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses operation order (mark read, then policy check, then create reply), thread/resource preservation, reply_to setting, both success and policy-denial return shapes, and the subtle side effect that the original can remain read even when sending is blocked. It also warns that bodies are redacted to a summary/hash rather than full-text delivery, which is exactly the kind of non-obvious behavior an agent must know before calling.

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?

Front-loaded with the core action and has no throwaway sentences, but the single dense paragraph packs many distinct clauses (ordering, returns, errors, redaction, alternative) and would be slightly easier to parse if broken up. Every clause still earns its place.

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 three-parameter mutation with no annotations and no output schema, the description covers prerequisites, side effects, success and denial return shapes, error cases, and redaction behavior. Nothing essential for a correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds relational meaning between parameters: message_id must be an existing message addressed to from_agent, and the reply is addressed to that message's original sender. That linkage goes beyond the individual field descriptions and clarifies the mismatch-error path.

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?

States a specific verb and resource ('Reply to a local Mesh message') and immediately scopes it to messages addressed to from_agent. It also distinguishes itself from the sibling agentsecure.send_message for new threads, so an agent can select correctly without opening the schema.

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

Usage Guidelines5/5

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

Explicitly routes new threads to agentsecure.send_message and reserves this tool for existing messages addressed to from_agent. It also states the failure conditions (unknown message or recipient mismatch) that rule this tool out.

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

agentsecure.request_approvalA

Create a local pending approval record when a Mesh policy hint requires human review. Returns an approval object with approval_id, status=pending, requested_by, action, resource, required_approver, and timestamps; reason is redacted with a summary/hash. Writes local state and audit but does not send a message, notify a human, execute the action, or change policy. Repeated calls create separate requests. Use agentsecure.get_approval_status with the returned ID; approval decisions are made outside these MCP tools. An approved record does not automatically unblock policy. Example: {"requested_by": "frontend-agent", "action": "deploy_preview", "reason": "Please review the preview deployment."}.

NameRequiredDescriptionDefault
actionYesNon-empty proposed action label, e.g. deploy_preview; use the same action supplied to get_policy_hint. Records intent only and does not execute it.
reasonYesJustification to summarize/hash. Stored reason is [redacted], but up to 120 characters can remain in a heuristic summary. Do not include secrets.
resourceNoOptional resource metadata; defaults to {}. Stored/returned fields are limited to action, environment, id, path, provider, repo, team, and type. Use non-secret scalar values or lists; other keys and top-level object-valued fields are dropped; list items are converted to scalars, and strings are truncated/redacted. Example: {"type": "code_file", "path": "src/app.py"}. For policy checks, the entire supplied object is examined for sensitive-action markers.
requested_byYesNon-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials.
required_approverNoOptional approver metadata, e.g. {"type": "team", "id": "platform"}. Omitted/empty selects resource.team, then security team for a case-sensitive action containing security/secret, else human local-owner. Stored as supplied; use only non-secret labels. Does not authenticate an approver.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses local state and audit writes, redaction of reason into a summary/hash, that repeated calls create separate requests, and that an approved record does not unblock policy. It stops short of stating permissions or concurrency/idempotency guarantees for the audit write, which keeps it from a 5.

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?

Front-loaded with purpose and scoping negatives, and dense with no filler sentences. It is a long single paragraph for a 5-parameter mutation, though each clause carries distinct information; light structure (bullets or a short return-value sentence) would improve scanability.

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?

No output schema exists, yet the description enumerates returned fields (approval_id, status, timestamps, etc.), describes side effects, redaction, and the downstream decision workflow. Nothing needed to invoke or interpret the call is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes further by supplying a concrete example call and tying the action label to the one supplied to get_policy_hint, plus noting requested_by should come from AGENTSECURE_AGENT_ID and is a caller-supplied label, not a credential.

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?

Opens with a specific verb and resource: 'Create a local pending approval record when a Mesh policy hint requires human review.' It also names the return object shape and distinguishes itself from siblings by stating it does not execute, notify, or change policy, and routes to get_approval_status.

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

Usage Guidelines5/5

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

Gives an explicit trigger (a policy hint requiring human review), explicit non-capabilities (no messaging, no notification, no execution, no policy change), the follow-up tool to use (agentsecure.get_approval_status with the returned ID), and the exclusion that decisions happen outside these MCP tools. It even warns that approval does not auto-unblock policy.

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

agentsecure.secret.statusA

Check whether one environment name is assigned in the current project's secret configuration before using its ${ENV_NAME} placeholder. Returns exists and env_name; when configured, also returns source (vault_alias or project_binding), provider, mode, and alias metadata when applicable. This is a configuration lookup, not a vault-value or credential-validity check, and returns no secret value. Use agentsecure.policy.describe to list all configured aliases and bindings. Example: {"env_name": "API_KEY"}.

NameRequiredDescriptionDefault
env_nameYesExact configured environment name, e.g. API_KEY, without ${...}; not an alias ID or a secret value.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and explains the return shape, including exists, env_name, and conditional source/provider/mode metadata. It also states that no secret value is returned, though it does not explicitly discuss read-only safety, permissions, or rate limits.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then efficiently covers return values, exclusions, the relevant alternative tool, and a concise example. Every sentence contributes useful selection or invocation guidance.

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?

Given the low-complexity, one-parameter lookup and the absence of an output schema or annotations, the description supplies enough context to select and invoke the tool correctly. It covers purpose, return fields, exclusions, and the sibling alternative without requiring further inference.

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

Parameters3/5

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

The input schema already fully documents the single env_name parameter, including that it must be exact, without ${...}, and not an alias ID or secret value. The description reinforces this with an example but adds little semantic information beyond the schema.

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 states a specific verb and resource: checking whether an environment name is assigned in the current project's secret configuration before using its placeholder. It clearly distinguishes this from a vault-value or credential-validity check and names the sibling tool for listing all aliases and bindings.

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

Usage Guidelines5/5

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

It gives explicit usage context: use this before referencing a ${ENV_NAME} placeholder, and use agentsecure.policy.describe when you need to list all configured aliases and bindings. It also clarifies what the tool is not for, namely vault-value lookup or credential-validity checking.

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

agentsecure.send_messageA

Create a new unread message in the local Community Mesh store for another agent. Checks the sender's send_message policy and resource approval requirements. Returns blocked=false and message (including message_id/thread_id), or blocked=true with reason and allowed_next_step. Stores/audits a redacted body, digest, and heuristic summary, not the full text; never put secrets in the input. Does not launch/wake the recipient, contact a remote service, or prove the recipient read it. Use agentsecure.reply_message to respond in an existing thread. Example: {"from_agent": "frontend-agent", "to": "backend-agent", "body": "Please review src/app.py."}.

NameRequiredDescriptionDefault
toYesNon-empty recipient Mesh agent ID, not an email address. Local registration is not required; delivery means a record in the shared local store.
bodyYesMessage text to summarize/hash. The body field is stored as [redacted], but a heuristic summary of up to 120 characters may remain. Do not include secrets; full text cannot later be retrieved.
typeNoMessage category; defaults to question. Supported: question, reply, approval_request, approval_decision, policy_denial, system_notice, ownership_request, resource_comment, task_handoff. A category alone does not create or resolve an approval.
subjectNoOptional subject, default empty. Whitespace is collapsed and text is truncated to 120 characters or redacted by heuristics. Do not include secrets.
resourceNoOptional resource metadata; defaults to {}. Stored/returned fields are limited to action, environment, id, path, provider, repo, team, and type. Use non-secret scalar values or lists; other keys and top-level object-valued fields are dropped; list items are converted to scalars, and strings are truncated/redacted. Example: {"type": "code_file", "path": "src/app.py"}. For policy checks, the entire supplied object is examined for sensitive-action markers.
from_agentYesNon-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does it well: it discloses both response branches (blocked=false with message/message_id/thread_id, blocked=true with reason and allowed_next_step), the redaction/audit behavior (redacted body, digest, heuristic summary retained), and the security warning about secrets. It stops short of covering failure modes such as unknown recipient IDs or policy-denial specifics, which keeps it at 4 rather than 5.

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?

Behavior (what is stored) and the safety warning are front-loaded before the sibling pointer and example, which is the right ordering. It is dense but readable; the secrets warning and redaction detail are stated twice (description and body/from_agent schema), a minor redundancy in an otherwise tight definition.

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?

There is no output schema, and the description compensates by describing the exact return shape for both success and blocked outcomes. With a nested 'resource' object and six parameters, it covers the operational picture an agent needs: policy gating, non-delivery semantics, and irreversibility of the stored body.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description still adds value by supplying a concrete worked example ({"from_agent": "frontend-agent", "to": "backend-agent", "body": ...}) and by reinforcing the secrets constraint on body that the schema also flags. It does not, however, explain the 'type' enum's effect on policy/approval beyond what the schema lists.

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?

Opens with a specific verb+resource+scope: 'Create a new unread message in the local Community Mesh store for another agent.' It immediately separates itself from the closest sibling by naming agentsecure.reply_message as the in-thread alternative, so an agent can route without opening either schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative (reply_message) and the condition selecting it, and gives concrete exclusions: does not launch/wake the recipient, contact a remote service, or prove read. It also states the policy/approval check that runs before a send, which is the key precondition an agent needs.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updates
    • Changedagentsecure.audit_context2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Number of most recent matching events to return; defaults to 50. Use a positive integer (values are converted with int); 0 returns all matches, not zero events."
      • addedInput schema / properties / resource / description
        Added value: +"Optional filter, e.g. {\"path\": \"src/app.py\"}; defaults to {} (all Mesh events). Each key and stringified value must occur in serialized event details. This is substring matching, not exact structured matching."
    • Changedagentsecure.check_messages1 field changed
      • addedInput schema / properties / agent_id / description
        Added value: +"Non-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials."
    • Changedagentsecure.get_approval_status1 field changed
      • addedInput schema / properties / approval_id / description
        Added value: +"Exact approval_id returned by request_approval (apr_...); non-empty and must exist in the local Mesh store."
    • Changedagentsecure.get_policy_hint4 fields changed
      • addedInput schema / properties / action / description
        Added value: +"Non-empty action label matched against mesh.agents policy, e.g. send_message or deploy_preview. Action/resource text is also checked for sensitive markers such as deploy or secret."
      • addedInput schema / properties / agent_id / description
        Added value: +"Non-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials."
      • addedInput schema / properties / resource / description
        Added value: +"Optional resource metadata; defaults to {}. Stored/returned fields are limited to action, environment, id, path, provider, repo, team, and type. Use non-secret scalar values or lists; other keys and top-level object-valued fields are dropped; list items are converted to scalars, and strings are truncated/redacted. Example: {\"type\": \"code_file\", \"path\": \"src/app.py\"}. For policy checks, the entire supplied object is examined for sensitive-action markers."
      • addedInput schema / properties / target / description
        Added value: +"Recipient agent ID for a send_message check; defaults to empty. Only used with action=send_message to check can_message restrictions; not a hostname or URL."
    • Changedagentsecure.http.request9 fields changed
      • addedInput schema / properties / body / description
        Added value: +"UTF-8 text request body, optionally containing placeholders; defaults to empty. Ignored when a non-null json payload is supplied."
      • addedInput schema / properties / headers / description
        Added value: +"Header name/value map; defaults to {} and values are converted to strings. Put secret placeholders in values, e.g. {\"Authorization\": \"Bearer ${API_KEY}\"}."
      • addedInput schema / properties / json / description
        Added value: +"JSON-serializable request payload. When supplied and non-null, overrides body and sets the exact Content-Type header key to application/json unless already provided. Placeholders are replaced in string values, not object keys."
      • addedInput schema / properties / method / description
        Added value: +"HTTP method, e.g. GET or POST; defaults to GET and is uppercased. Choose a method appropriate for the authorized operation."
      • addedInput schema / properties / query / description
        Added value: +"Query name/value map appended to any URL query; defaults to {}. Values are stringified and URL-encoded; string values may contain placeholders. Arrays are not expanded into repeated parameters."
      • addedInput schema / properties / timeout_seconds / description
        Added value: +"Connection/socket timeout in seconds, not an overall task deadline. Use a positive number; omission or 0 uses 30 seconds."
      • addedInput schema / properties / ttl / description
        Added value: +"Lifetime of temporary vault-alias grants; defaults to 2h. Positive integer plus optional s, m, h, or d (bare number means seconds), at most 24h, e.g. 30m. Grants are revoked after the request; this is not the HTTP timeout."
      • addedInput schema / properties / url / description
        Added value: +"Absolute http:// or https:// URL with a host approved by project policy. Placeholders may appear in the path/query, never the host or port. Prefer HTTPS."
      • addedInput schema / properties / verify_tls / description
        Added value: +"Whether to verify HTTPS certificates; defaults to true. False disables verification and weakens protection; leave enabled for normal use. Has no effect on HTTP."
    • Changedagentsecure.identity9 fields changed
      • addedInput schema / properties / agent_id / description
        Added value: +"Local Mesh ID to look up or register. Omit/empty to list identities when register=false; non-empty required when register=true. Not inferred from the environment or authenticated."
      • addedInput schema / properties / allowed_scopes / description
        Added value: +"Scope labels to store at registration; defaults to []. Informational only, not enforced by Mesh policy; ignored on lookup."
      • addedInput schema / properties / name / description
        Added value: +"Display name for registration; defaults to agent_id. Ignored on lookup."
      • addedInput schema / properties / owner / description
        Added value: +"Owner label for registration; defaults to empty. Does not verify ownership; ignored on lookup."
      • addedInput schema / properties / register / description
        Added value: +"Defaults to false (lookup only). True creates or overwrites the agent_id record using the metadata below, including defaults for omitted fields."
      • addedInput schema / properties / team / description
        Added value: +"Team label for registration; defaults to empty. Used when counting approvals assigned to this team; ignored on lookup."
      • addedInput schema / properties / trust_level / description
        Added value: +"Trust label for registration; defaults to local. Metadata only, not a security boundary; ignored on lookup."
      • addedInput schema / properties / type / description
        Added value: +"Agent classification for registration; defaults to coding_agent. Metadata only; ignored on lookup."
      • addedInput schema / properties / workspace / description
        Added value: +"Workspace label for registration; defaults to local. Does not select a filesystem directory; ignored on lookup."
    • Changedagentsecure.list_messages2 fields changed
      • addedInput schema / properties / agent_id / description
        Added value: +"Non-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials."
      • addedInput schema / properties / include_read / description
        Added value: +"Defaults to false (unread only). True includes already-read messages as well; neither setting marks messages read."
    • Changedagentsecure.read_message2 fields changed
      • addedInput schema / properties / agent_id / description
        Added value: +"Non-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials."
      • addedInput schema / properties / message_id / description
        Added value: +"Exact message_id returned by list_messages or send_message. Unknown IDs cause an error."
    • Changedagentsecure.reply_message3 fields changed
      • addedInput schema / properties / body / description
        Added value: +"Reply text to summarize/hash; stored as [redacted] plus a heuristic summary of up to 120 characters and a digest. Do not include secrets."
      • addedInput schema / properties / from_agent / description
        Added value: +"Non-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials."
      • addedInput schema / properties / message_id / description
        Added value: +"Existing message_id addressed to from_agent. The reply goes to its original sender and reuses its thread and resource."
    • Changedagentsecure.request_approval5 fields changed
      • addedInput schema / properties / action / description
        Added value: +"Non-empty proposed action label, e.g. deploy_preview; use the same action supplied to get_policy_hint. Records intent only and does not execute it."
      • addedInput schema / properties / reason / description
        Added value: +"Justification to summarize/hash. Stored reason is [redacted], but up to 120 characters can remain in a heuristic summary. Do not include secrets."
      • addedInput schema / properties / requested_by / description
        Added value: +"Non-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials."
      • addedInput schema / properties / required_approver / description
        Added value: +"Optional approver metadata, e.g. {\"type\": \"team\", \"id\": \"platform\"}. Omitted/empty selects resource.team, then security team for a case-sensitive action containing security/secret, else human local-owner. Stored as supplied; use only non-secret labels. Does not authenticate an approver."
      • addedInput schema / properties / resource / description
        Added value: +"Optional resource metadata; defaults to {}. Stored/returned fields are limited to action, environment, id, path, provider, repo, team, and type. Use non-secret scalar values or lists; other keys and top-level object-valued fields are dropped; list items are converted to scalars, and strings are truncated/redacted. Example: {\"type\": \"code_file\", \"path\": \"src/app.py\"}. For policy checks, the entire supplied object is examined for sensitive-action markers."
    • Changedagentsecure.secret.status1 field changed
      • addedInput schema / properties / env_name / description
        Added value: +"Exact configured environment name, e.g. API_KEY, without ${...}; not an alias ID or a secret value."
    • Changedagentsecure.send_message6 fields changed
      • addedInput schema / properties / body / description
        Added value: +"Message text to summarize/hash. The body field is stored as [redacted], but a heuristic summary of up to 120 characters may remain. Do not include secrets; full text cannot later be retrieved."
      • addedInput schema / properties / from_agent / description
        Added value: +"Non-empty Mesh agent ID, e.g. backend-agent. Pass this session's AGENTSECURE_AGENT_ID value when set; it is not read automatically. IDs are caller-supplied local labels, not authentication credentials."
      • addedInput schema / properties / resource / description
        Added value: +"Optional resource metadata; defaults to {}. Stored/returned fields are limited to action, environment, id, path, provider, repo, team, and type. Use non-secret scalar values or lists; other keys and top-level object-valued fields are dropped; list items are converted to scalars, and strings are truncated/redacted. Example: {\"type\": \"code_file\", \"path\": \"src/app.py\"}. For policy checks, the entire supplied object is examined for sensitive-action markers."
      • addedInput schema / properties / subject / description
        Added value: +"Optional subject, default empty. Whitespace is collapsed and text is truncated to 120 characters or redacted by heuristics. Do not include secrets."
      • addedInput schema / properties / to / description
        Added value: +"Non-empty recipient Mesh agent ID, not an email address. Local registration is not required; delivery means a record in the shared local store."
      • addedInput schema / properties / type / description
        Added value: +"Message category; defaults to question. Supported: question, reply, approval_request, approval_decision, policy_denial, system_notice, ownership_request, resource_comment, task_handoff. A category alone does not create or resolve an approval."
  2. 13 tool updates
    • First observedagentsecure.audit_context
    • First observedagentsecure.check_messages
    • First observedagentsecure.get_approval_status
    • First observedagentsecure.get_policy_hint
    • First observedagentsecure.http.request
    • First observedagentsecure.identity
    • First observedagentsecure.list_messages
    • First observedagentsecure.policy.describe
    • First observedagentsecure.read_message
    • First observedagentsecure.reply_message
    • First observedagentsecure.request_approval
    • First observedagentsecure.secret.status
    • First observedagentsecure.send_message

TDQS

A4.5/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct action+resource: inbox counts vs. message records vs. acknowledgement are split across check_messages/list_messages/read_message, and policy inspection is split cleanly into policy.describe (HTTP/secret config), secret.status (single env), and get_policy_hint (Mesh actions). Descriptions actively cross-reference the correct sibling tool for each adjacent use case, leaving little room for misselection.

Naming Consistency3/5

All names share the agentsecure. namespace, but the suffix conventions are mixed: dotted resource.action forms (policy.describe, secret.status, http.request) coexist with verb_noun forms (send_message, list_messages, request_approval), and agentsecure.identity has no verb at all. Still readable, but not a predictable single pattern.

Tool Count5/5

13 tools is well within a comfortable range and each maps to a distinct facet of the mesh (messaging, approvals, identity, policy, secrets/HTTP, audit). No filler or redundant tools are apparent.

Completeness4/5

Messaging (send/list/read/reply/count), approvals (create/read), identity (lookup/register), policy inspection, secret-aware HTTP, and audit retrieval are all covered. Minor gaps remain: no way to cancel or withdraw a pending approval, no message deletion/archival, and no bulk listing of approvals, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that lets AI agents call APIs without ever seeing the credentials, using a local encrypted vault and per-secret allowlist policies for HTTP requests and subprocess environment variables.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Secrets management MCP server that injects credentials into API requests for AI agents, enforcing policies and logging all activity without exposing raw keys.
    31 npm
    30
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A local-first LLM routing MCP server that keeps sensitive data on your own models, with fail-closed privacy and manager-worker delegation, exposing route and complete tools to any MCP client.
    39 PyPI
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    A local stdio MCP server that enables coding agents to discover credential handles and create scoped action requests with local approval and sanitized output.
    7
    47 npm
    15
    Apache 2.0