Skip to main content
Glama
Creed-Space

creedspace-mcp

Official
by Creed-Space

creedspace-mcp-server

Universal MCP server for Creed Space - AI safety guardrails in 10 seconds.

npm version License: MIT

Available in

The server is published to the canonical MCP catalogues, so registry-aware clients can discover and install it directly — or use any command in Quick Start below.

  • npm@creedspace/mcp-server, the package every install path resolves to.

  • Official MCP Registryio.github.Creed-Space/creedspace-mcp-server.

  • GitHub — source, issues, and the server.json manifest.

  • Smitherynell/creedspace, a gateway-fronted Streamable HTTP endpoint.

Also rolling out across the wider MCP ecosystem: mcp.directory, mcpservers.org, PulseMCP (via the registry ingest), and mcp.so.

Related MCP server: repo-seatbelt

Quick Start

# STDIO transport (Claude Desktop, OpenAI Codex)
npx @creedspace/mcp-server --persona ambassador

# HTTP transport (OpenAI Agents SDK)
npx @creedspace/mcp-server --transport http --port 3100

# Test API connection
npx @creedspace/mcp-server test

What is Creed Space?

Creed Space provides personalized AI safety guardrails through Constitutional AI personas. Each persona enforces specific values and behaviors, ensuring AI assistants operate within defined ethical boundaries.

  • 🛡️ Reduces harmful AI outputs via constitutional evaluation of every response

  • 🎯 Refuses dangerous prompts according to the active persona's values

  • 🚀 10-second setup with any MCP-compatible AI

Available Personas

Persona

Icon

Purpose

Ambassador

🤝

Professional communication

Nanny

👶

Child-safe interactions

Sentinel

🛡️

Privacy and security focus

Godparent

🕊️

Religious and ethical guidance

Muse

🎨

Creative exploration

Anchor

Reality grounding

Installation

# No installation needed - just run!
npx @creedspace/mcp-server --persona ambassador

Option 2: Global Installation

npm install -g @creedspace/mcp-server
creedspace-mcp --persona ambassador

Option 3: Project Dependency

npm install @creedspace/mcp-server

Claude Desktop Integration

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "creedspace": {
      "command": "npx",
      "args": ["@creedspace/mcp-server", "--persona", "ambassador"]
    }
  }
}

Then restart Claude Desktop to load the Creed Space guardrails.

Configuration

Environment Variables

# .env file
CREEDSPACE_API_URL=https://api.creed.space
CREEDSPACE_API_KEY=your-api-key-here  # Optional
CREEDSPACE_DEFAULT_PERSONA=ambassador

Command Line Options

creedspace-mcp \
  --persona ambassador \
  --url https://api.creed.space \
  --api-key YOUR_KEY \
  --cache-ttl 300000 \
  --offline

# HTTP Transport Options
creedspace-mcp \
  --transport http \
  --port 3100 \
  --host localhost \
  --api-key YOUR_KEY \
  --cors \
  --cors-origin http://localhost:3000 \
  --stateless

Transport Types

Transport

Use Case

Platforms

stdio (default)

Local subprocess communication

Claude Desktop, OpenAI Codex

http

HTTP server for remote/local connections

OpenAI Agents SDK, custom integrations

Configuration File

# Generate example configs
creedspace-mcp --generate-config

# Use config file
creedspace-mcp --config creedspace.json

Available MCP Tools

The server provides 16 tools to MCP clients:

Constitutions

  • get_constitution - Get the merged constitution for a persona

  • get_constitution_by_id - Get a specific constitution by ID

  • search_constitutions - Search the constitution library

Personas

  • list_personas - List all available personas

  • set_persona - Switch the active persona

  • get_active_persona - Get the currently active persona

  • get_uvc_qualities - Get desired/disliked/never qualities

  • get_system_prompt - Get a complete persona system prompt

  • preview_export - Preview the export configuration

Runtime guardrails

  • adjudicate - Get a policy decision kernel for a request

  • attest_response - Validate a response against the active creed

  • get_anchor - Get a compact non-negotiable-rules anchor

  • heartbeat - Periodic re-anchoring to prevent context drift

  • clear_cache - Clear the local cache

Multi-scale value handshake

  • perform_multi_scale_handshake - N-party value handshake across micro/meso/macro scales

  • get_scale_attestation - Get an attestation record with hash chain

Programmatic Usage

import { CreedSpaceMCPServer } from '@creedspace/mcp-server';

// Start server programmatically
const server = new CreedSpaceMCPServer({
  persona: 'ambassador',
  apiUrl: 'https://api.creed.space',
  cacheEnabled: true
});

await server.start();
// Use the API client directly
import { CreedSpaceClient } from '@creedspace/mcp-server';

const client = new CreedSpaceClient();
const personas = await client.getPersonas();
const constitution = await client.getMergedConstitution('ambassador');

Platform Integration Examples

OpenAI Agents SDK (HTTP Transport)

from agents import Agent
from agents.mcp import MCPServerStreamableHttp

# Start the server first:
# npx @creedspace/mcp-server --transport http --port 3100

server = MCPServerStreamableHttp(
    url="http://localhost:3100/mcp",
    name="creedspace"
)

agent = Agent(
    name="safe-agent",
    tools=[server.get_tools()]
)

# The agent now has access to Creed Space safety tools

OpenAI Codex (STDIO Transport)

Add to ~/.codex/config.toml:

[mcp_servers.creedspace]
command = "npx"
args = ["@creedspace/mcp-server", "--persona", "ambassador"]

[mcp_servers.creedspace.env]
CREEDSPACE_API_URL = "https://api.creed.space"

VS Code / Cursor

{
  "mcp.servers": {
    "creedspace": {
      "command": "npx",
      "args": ["@creedspace/mcp-server", "--persona", "ambassador"]
    }
  }
}

Continue.dev

{
  "models": [{
    "provider": "openai",
    "mcp_servers": [{
      "command": "npx",
      "args": ["@creedspace/mcp-server"]
    }]
  }]
}

LangChain

from langchain.tools import MCPTool

creedspace = MCPTool(
    command="npx",
    args=["@creedspace/mcp-server", "--persona", "ambassador"]
)

Testing

# Test API connection
npx @creedspace/mcp-server test

# Test with specific URL
npx @creedspace/mcp-server test --url http://localhost:8000

Offline Mode

The server includes intelligent caching for offline usage:

# Enable offline mode with cached data
creedspace-mcp --offline --persona ambassador

Development

# Clone the repository
git clone https://github.com/Creed-Space/creedspace-mcp-server.git
cd creedspace-mcp-server

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run in development mode
npm run dev

# Run tests
npm test

API Documentation

Full API documentation available at https://api.creed.space/api-docs

Support

License

MIT © Nell Watson


Building critical AI safety infrastructure that shapes autonomous AI-human value interaction.

Available Tools

16 tools
adjudicateC

Get a policy decision kernel for a user request based on active constitutions and persona

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNoAdditional context for the decision
questionYesThe user question or request to adjudicate
persona_idNoThe persona ID for policy contextambassador

Output Schema

ParametersJSON Schema
NameRequiredDescription
hashNoKernel hash for verification
nonceNoEcho of the request nonce; null when none was supplied
normsNoNorms applied when reaching the decision
caveatsNoCaveats to the verdict
sourcesNoConstitution sources cited by the decision
decisionNoPolicy verdict (allow, block, modify, escalate, permit, forbid, divert, depends)
rationaleNoShort explanation of the decision
timestampNoUnix timestamp of the decision
precedenceNoPrecedence ordering used to resolve conflicting norms
transparencyNoTransparency detail; null unless a transparency level was requested

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already mark the tool with readOnlyHint=false and idempotentHint=false, but the description adds no behavioral detail about what that implies—such as side effects, influence tracking, or whether the request is recorded. The phrase 'Get' sounds read-only and is not strongly reconciled with readOnlyHint=false, and no meaningful behavioral context is disclosed beyond what the annotations provide.

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 a single, focused sentence that states purpose in minimal words and includes no fluff. It puts the essential action first and contains no excessive detail, making the verb-resource-input structure easy to parse quickly.

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

Completeness2/5

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

Although an output schema exists and parameters are fully documented in the schema, the description omits usage context such as recommending when to call this tool, the requirements (e.g., active constitutions or persona availability), and side-effect semantics. For a decision-making tool with a non-readonly annotation, that missing context is material.

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%, so the input schema already documents context, question, and persona_id well. The description's mention of 'active constitutions and persona' does add slight semantic mapping to the context.constitutions and persona_id parameters, but it does not enrich individual parameter meaning beyond that. With full schema coverage, baseline 3 is appropriate.

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

Purpose4/5

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

The description names a specific verb ('Get'), a resource ('policy decision kernel'), and the input basis ('for a user request based on active constitutions and persona'). This clearly identifies the tool's function and generally separates it from sibling retrieval tools like get_constitution or list_personas, though the phrase 'decision kernel' is somewhat jargon-heavy and not immediately precise.

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

Usage Guidelines2/5

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

The description does not state when to use adjudicate versus alternative tools, nor does it provide any exclusion or routing guidance. It merely describes what the tool does, leaving an agent to infer that it should be used when a policy decision is needed. Given the many sibling tools, explicit usage conditions would be valuable.

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

attest_responseA
Read-only

Validate a response against the active creed to check for violations and ensure attestation

ParametersJSON Schema
NameRequiredDescriptionDefault
responseYesThe response text to validate
persona_idNoThe persona ID to validate againstambassador

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesfail on violations, warn on warnings only, otherwise pass
warningsYesNon-blocking issues, e.g. a missing attestation
creedHashNoActive creed hash, or null when no creed has been fetched yet
violationsYesForbidden qualities detected in the response
attestationPresentYesWhether the response embeds the active creed hash

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint annotation indicates no side effects, but the description does not explain what happens when a violation is found or how the attestation result is returned. The exact behavioral outcome (e.g., boolean, error, report) is not disclosed.

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 a single, concise sentence that introduces the tool's purpose without unnecessary details or redundancy. It is well-structured and easy to parse.

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

Completeness3/5

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

While the tool has an output schema (per context signals), it is not included in the description itself, leaving the agent without knowledge of what the tool returns. Additionally, the description does not mention any potential side effects or state changes beyond the readOnlyHint annotation.

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?

Both parameters are described in the schema, and the coverage is 100%. However, the description does not add context beyond the schema definitions—for example, it does not clarify what constitutes a valid 'response' or how 'persona_id' affects validation.

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

Purpose4/5

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

The description clearly identifies the action (validate) and the target (response against the active creed). However, it does not distinguish itself from sibling tools like 'adjudicate' or 'perform_multi_scale_handshake,' which could lead to confusion about when to use this specific tool.

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

Usage Guidelines3/5

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

The description implies usage for checking attestation but does not explicitly state when to prefer this tool over alternatives. No guidance is given about prerequisites or scenarios where other tools (e.g., 'adjudicate' or 'get_scale_attestation') would be more appropriate.

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

clear_cacheA
Idempotent

Clear the local cache to force fresh data from the API

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
clearedYesTrue once the local cache has been cleared
messageYesHuman-readable confirmation

TDQS

A4.6/5.0
Behavior4/5

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

The description explicitly discloses the mutation (clearing the cache) and the resulting behavior (forcing fresh data). It does not mention potential side effects, but since the annotation indicates destructiveHint is false, the operation is expected to be safe and reversible. This provides adequate transparency.

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 extremely concise, using a single sentence to convey the action, target, and purpose. No unnecessary words or repetition. It is well-structured for quick comprehension.

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 simplicity of the tool (no parameters, no complex behavior), the description provides all necessary information for an agent to understand and invoke it correctly. The effect on data freshness is clearly stated, making the context complete.

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?

The tool has no parameters, and the schema coverage is 100% (empty schema). There is nothing to document, so the description fully covers the parameter space. A perfect score is appropriate.

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 clearly states the tool's function: clearing the local cache to force fresh data. It uses a specific verb ('Clear') and identifies the resource ('local cache') and the intended effect ('force fresh data from the API'). This is unambiguous and distinguishes it from sibling tools.

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?

The description implies when to use the tool (whenever a refresh of data is needed) but does not explicitly contrast it with alternatives. However, among the listed sibling tools, none serve a similar purpose, so the guidance is sufficient for correct selection.

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

get_active_personaA
Read-only

Get the currently active persona for this session

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesPersona ID
iconYesPersona icon (emoji)
nameYesHuman-readable persona name
descriptionYesPersona description

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate read-only, and description adds no extra behavioral details; it's a simple getter.

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?

Single concise sentence with no filler.

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

Completeness4/5

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

Given no parameters, no output schema, and a clear purpose, the description is sufficient; it doesn't need to explain more.

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?

No parameters, so schema fully covers; description adds nothing extra, but that's fine per baseline.

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?

Clearly states it retrieves the active persona, distinguishing from list_personas (listing all) and set_persona (setting).

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

Usage Guidelines3/5

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

Provides no explicit guidance on when to prefer it over siblings, but the name and purpose make it obvious for fetching the current persona.

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

get_anchorA
Read-only

Get a compact anchor (1-2KB) with top 10 non-negotiable rules and creed hash for quick context reinforcement

ParametersJSON Schema
NameRequiredDescriptionDefault
max_lengthNoMaximum length of anchor in characters (100-2000)
persona_idNoThe persona IDambassador

Output Schema

ParametersJSON Schema
NameRequiredDescription
anchorYesCompact anchor text
personaYesHuman-readable persona name
maxLengthYesMaximum length applied
personaIdYesThe persona the anchor was built for
truncatedYesTrue when the anchor was cut to fit max_length
totalRulesNoTotal rules in the merged creed

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate this is a read-only, open-world operation. The description adds non-redundant context by specifying the output compactness (1-2KB), the content (top 10 rules, creed hash, and how this serves quick reinforcement). No contradictions with annotations.

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 a single, tightly-written sentence that front-loads the core action ('Get a compact anchor') and immediately conveys its size and content, with no waste words.

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

Completeness4/5

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

With only 2 optional parameters, comprehensive schema descriptions, an output schema, and annotations covering read-only / open-world, the description completes the main context. It explains the output's purpose but could be slightly more explicit about when to choose it over get_constitution or get_system_prompt.

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% and descriptions already exist for max_length and persona_id. The tool description does not need to add parameter-specific meaning; it kept the baseline of 3, meaning no extra value beyond schema is offered.

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

Purpose4/5

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

The description identifies the verb ('Get'), resource ('anchor'), and specific includes (top 10 non-negotiable rules and creed hash). It communicates the compact nature and the purpose, though it does not explicitly compare to sibling tools like get_constitution or get_system_prompt.

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 clearly provides a usage context ('for quick context reinforcement'), which implies when an agent might want this instead of a full document. However, it does not explicit delimit alternatives or state when not to use it, so it does not reach a 5.

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

get_constitutionA
Read-only

Get the merged constitution for a specific persona, including all active rules and UVC qualities

ParametersJSON Schema
NameRequiredDescriptionDefault
persona_idNoThe persona ID (e.g., "ambassador", "nanny", "sentinel")ambassador

Output Schema

ParametersJSON Schema
NameRequiredDescription
iconNoPersona icon (emoji)
contentYesMerged constitution text
personaYesHuman-readable persona name
uvcTokenNoUVC token, when configured for the persona
totalRulesYesTotal number of rules in the merged creed
creedAttestationNoAttestation line binding this response to the active creed hash

TDQS

A4/5.0
Behavior4/5

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

The read-only nature is already indicated by the readOnlyHint annotation, so no additional side-effect disclosure is needed. The description adds transparency about the returned content (all active rules and UVC qualities), which helps set expectations.

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 a single, concise sentence that conveys the essential purpose without redundancy. It is well-structured and directly states the tool's function and content scope.

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

Completeness4/5

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

Given the tool's simplicity and the presence of an output schema (not detailed here), the description does not need to explain return values. It sufficiently covers the input and purpose, though it does not mention potential errors or edge cases, which is minor given the context.

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 single parameter persona_id is fully described in the schema (including default and examples), achieving 100% coverage. The tool description does not add supplementary meaning beyond the schema, so the baseline score of 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?

The description clearly states the tool retrieves a merged constitution for a specific persona, including active rules and UVC qualities. It uses a specific verb ('Get') and identifies the resource ('merged constitution') and scope ('for a specific persona'), effectively distinguishing it from tools like get_constitution_by_id.

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

Usage Guidelines3/5

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

The description implies usage via 'for a specific persona' and the persona_id parameter, but does not explicitly contrast with alternatives such as get_constitution_by_id or list_personas. No explicit guidance on when to prefer this tool over others is provided.

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

get_constitution_by_idA
Read-only

Get a specific constitution by its ID

ParametersJSON Schema
NameRequiredDescriptionDefault
constitution_idYesThe constitution ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesConstitution ID
nameYesConstitution name
contentYesFull constitution text
personaIdNoOwning persona ID, when persona-scoped
uvcQualitiesNoValue qualities for the persona; null when UVC is not configured
isSystemConstitutionYesTrue for built-in system constitutions

TDQS

A3.5/5.0
Behavior4/5

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

The readOnlyHint annotation already indicates this is a read-only operation, and the description aligns with that by using the verb 'Get'. No side effects are mentioned, and there is no contradiction between the description and annotations.

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 a single, concise sentence that directly states the tool's purpose without unnecessary elaboration or redundancy.

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

Completeness2/5

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

Given the existence of a sibling tool 'get_constitution', the description does not clarify the difference, leaving the agent uncertain about which tool to invoke. Additionally, there is no output schema or description of the return value, which could be important for usage.

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?

The single parameter 'constitution_id' is clearly described as 'The constitution ID', which matches the schema. The description fully covers the parameter's meaning, though it adds minimal extra context beyond the name.

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

Purpose4/5

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

The description clearly states the action (get) and resource (a specific constitution by ID). However, it does not differentiate from the sibling tool 'get_constitution', which likely has a similar purpose, creating ambiguity about the exact distinction.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus the sibling 'get_constitution'. The description implies it is for fetching a constitution by ID, but does not explicitly state the alternative or the conditions for choosing this tool over another.

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

get_scale_attestationA
Read-only

Get attestation record with hash chain for a specific scale and entity

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleYesScale level for attestation
entity_idYesEntity ID to get attestation for
include_chainNoInclude parent hash chain

Output Schema

ParametersJSON Schema
NameRequiredDescription
chainNoParent hash chain; present when include_chain was set
scaleNoAlignment scale of the attestation
entity_idNoEntity the attestation belongs to
attestationNoNull when no attestation exists for the entity

TDQS

A4/5.0
Behavior4/5

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

The description mentions the hash chain inclusion, adding useful info about the response. With readOnlyHint true, there is no contradiction and no hidden side effects.

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?

Single concise sentence that immediately conveys the tool's core purpose without unnecessary detail.

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

Completeness4/5

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

The description is sufficient for understanding the tool's function given the output schema exists. It doesn't need to elaborate on return format, but the mention of hash chain provides context.

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 descriptions cover the parameters adequately. The description adds minimal extra meaning beyond restating 'scale and entity', so baseline of 3 is appropriate.

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 clearly states the action (get), the resource (attestation record), and specific scoping (by scale and entity). It is distinct from sibling tools like 'attest_response' and 'get_anchor'.

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

Usage Guidelines3/5

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

The description implies usage for retrieving attestation records by scale and entity, but does not explicitly mention when to choose this over alternatives or provide any usage conditions.

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

get_system_promptA
Read-only

Get a complete system prompt for a persona including constitution and UVC qualities

ParametersJSON Schema
NameRequiredDescriptionDefault
persona_idNoThe persona IDambassador

Output Schema

ParametersJSON Schema
NameRequiredDescription
personaIdYesThe persona the prompt was built for
systemPromptYesAssembled system prompt text
creedAttestationYesAttestation line binding the prompt to the active creed hash

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, so no side-effect disclosure is needed. The description adds useful context about the content of the returned prompt (includes constitution and UVC qualities), going beyond the annotation.

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 a single, concise sentence with no unnecessary words. It efficiently conveys the purpose and content of the tool.

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

Completeness4/5

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

For a simple get operation with no output schema, the description provides enough context. It does not mention error cases or how to discover personas, but given the sibling tools (e.g., list_personas), an agent can infer the workflow. The absence of an output schema means no need to document return values.

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?

The single parameter 'persona_id' is documented in the schema with a default value. The tool description relates the parameter to 'a persona,' and the schema provides a basic description. This is sufficient for correct usage, though it could benefit from listing valid persona IDs or linking to a listing tool.

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 clearly states the action ('Get'), the resource ('system prompt for a persona'), and the scope (includes constitution and UVC qualities). It distinguishes itself from sibling tools like get_constitution or get_uvc_qualities by indicating it retrieves the full combined prompt.

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?

The description implies when to use this tool (when a complete system prompt is needed) but does not explicitly mention alternatives or when not to use it. The meaning is clear enough for an agent to infer, but a direct comparison with siblings would improve guidance.

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

get_uvc_qualitiesA
Read-only

Get the desired, disliked, and never qualities for a persona from the UVC system

ParametersJSON Schema
NameRequiredDescriptionDefault
persona_idNoThe persona IDambassador

Output Schema

ParametersJSON Schema
NameRequiredDescription
personaIdYesThe persona the qualities belong to
qualitiesNoValue qualities for the persona; null when UVC is not configured
configuredYesFalse when no UVC qualities are configured for the persona

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds no behavioral details beyond stating it retrieves qualities, such as error handling, default persona behavior, or limits. It is consistent with annotations but provides minimal added transparency.

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 a single sentence that front-loads the action and resource. It contains no filler and is appropriately sized for a simple getter tool.

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

Completeness4/5

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

Given the tool has only one optional parameter and an output schema (which covers return structure), the description is sufficient for basic invocation. It does not address edge cases or alternative usage, but for a simple read-only getter the descriptions covers the essential context.

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% and the parameter 'persona_id' is already described as 'The persona ID' with a default. The description adds no extra meaning or constraints beyond what the schema provides, so the baseline of 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?

The description clearly states the verb 'Get' and specifies the resource as 'desired, disliked, and never qualities for a persona from the UVC system'. It is specific enough to distinguish from sibling tools like get_constitution or get_system_prompt, which target different resources.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any context for selection, such as comparing to other getters or explaining that it is the only way to retrieve persona qualities. The agent has to infer usage from the name and schema alone.

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

heartbeatB
Read-only

Periodic re-anchoring to prevent context drift - returns mini-anchor every 10 messages

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce anchor return regardless of message count
persona_idNoThe persona IDambassador
message_countNoCurrent message count in the session

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYesMini-anchor text, or the heartbeat acknowledgement
personaNoHuman-readable persona name; present only when anchored
anchoredYesTrue when a mini-anchor was returned rather than a plain acknowledgement
personaIdYesThe persona used for re-anchoring
messageCountYesMessage count supplied by the caller

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the agent already knows this is a safe, read-only operation. The description adds that it returns a mini-anchor and the frequency, which is useful context. However, it does not disclose any further behavioral details like dependencies on session state or how force modifies behavior. It does not contradict 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 a single sentence, concise and front-loaded with the primary purpose. It is easy to scan and contains no filler. However, it is slightly too brief to capture all necessary usage nuances, but for conciseness it is effective.

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

Completeness2/5

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

The tool has 3 optional parameters and an output schema. The description does not clarify when to use force, how message_count interacts with the 'every 10 messages' rule, or how this tool relates to get_anchor. It lacks guidance on prerequisites or conditions for invocation. Given the complexity (multiple params and siblings), the description is incomplete for an agent to decide when to call it correctly.

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% with each parameter having a description, so the baseline for high coverage is 3. The description adds minimal value beyond the schema: it mentions 'every 10 messages' which relates to message_count, but does not explain the purpose of force or persona_id. It does not compensate or enrich the parameter meanings beyond what the schema already provides.

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

Purpose4/5

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

The description clearly states that the tool performs periodic re-anchoring to prevent context drift and returns a mini-anchor every 10 messages. It has a specific verb and resource, and the frequency is mentioned. However, it does not explicitly differentiate from siblings like get_anchor, which might also provide anchors, so it is not fully distinct.

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

Usage Guidelines2/5

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

The description implies periodic usage ('every 10 messages') but does not explicitly state when to use this tool versus alternatives such as get_anchor. It does not connect the message_count parameter to the condition, nor does it explain when to use the force parameter. No exclusions or alternative scenarios are provided.

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

list_personasA
Read-only

List all available AI personas with their descriptions and current status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
currentYesCurrently active persona ID for this session
availableYesAll personas available from the Creed Space API

TDQS

A4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, which covers safety and scope. The description adds that results will include descriptions and current status, which is mild value beyond the annotations. It does not discuss pagination, order, or response structure, but for a simple read-only list with annotations this is acceptable.

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?

A single sentence, 'List all available AI personas with their descriptions and current status', with no filler. It front-loads the action and resource, giving the essential information instantly.

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

Completeness4/5

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

Given this is a 0-parameter read-only list with an output schema present, the description is complete: it specifies what is listed and what fields appear. It does not need to explain return values because the output schema already provides that. A minor lack is no mention of pagination/order, but that is not required for a simple listing with an output schema.

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?

There are zero parameters, so the input schema is fully covered at 100% and there are no parameter semantics for the description to clarify. Per the rubric, a tool with no parameters earns a baseline 4; the description exposes the list's content rather than adding parameter behavior.

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: 'List all available AI personas' with an extra detail on what the listing includes ('descriptions and current status'). It is clearly distinguished from siblings like set_persona (mutating) and get_active_persona (single item) by the 'all available' phrasing.

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

Usage Guidelines3/5

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

Usage is implied rather than explicit: 'List all available AI personas' conveys this is for enumeration, and the sibling set shows alternatives like get_active_persona, but the description does not explicitly say when to prefer this over those or include any 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.

perform_multi_scale_handshakeB

Perform N-party value handshake across micro/meso/macro scales with anti-collusion and hierarchical budgets

ParametersJSON Schema
NameRequiredDescriptionDefault
partiesYesArray of party contexts for handshake
invariantsNoList of invariant rules that must be enforced

Output Schema

ParametersJSON Schema
NameRequiredDescription
conflictsNoConflicts detected between parties
rationaleNoExplanation of the handshake outcome
party_weightsNoWeight assigned to each party in the synthesis
scale_attestationsNoAttestation record per alignment scale
precedence_decisionsNoPrecedence decisions taken to resolve competing party values
synthesized_constitutionNoMerged UVC components agreed across parties; null when no synthesis was reached

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is partially covered. The description adds behavioral context like 'anti-collusion and hierarchical budgets', but does not explain what side effects occur, what happens on failure, or whether any state is mutated. This is acceptable given the annotations cover the basics, but more detail would improve transparency.

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 a single sentence with no filler, front-loading the core action. It is efficient and well-structured. However, it is so brief that it borders on under-specification, which is a slight deduction from a perfect score.

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

Completeness2/5

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

For a tool with nested party objects and invariants, the description is severely underspecified. It does not explain what a 'handshake' entails, how invariants are enforced, what constitutes success, or what the output looks like (though an output schema exists). Given the complexity of multi-party, multi-scale operation, the description is inadequate for an agent to invoke it correctly without additional context.

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%, meaning all parameters (parties, invariants) have descriptions in the schema. The description itself does not add detailed parameter semantics, but it does imply the handshake operates on multiple parties and scales, which aligns with the schema. Since the schema already carries the burden, a baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a specific action ('Perform N-party value handshake') with clear scope ('across micro/meso/macro scales') and adds distinctive elements ('anti-collusion and hierarchical budgets'). It is not a tautology and distinguishes from siblings like 'adjudicate' which is a different operation. However, the term 'handshake' is not elaborated, leaving some ambiguity about the exact operation.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. Siblings such as 'adjudicate' or 'attest_response' might be related, but the description does not mention them or any conditions that would select this tool over others. The agent must infer usage from the name alone.

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

preview_exportC

Preview the export configuration for Claude Code or other AI tools

ParametersJSON Schema
NameRequiredDescriptionDefault
persona_idNoThe persona IDambassador
include_uvcNoInclude UVC qualities in export
include_constitutionsNoInclude constitutions in export
include_system_promptNoInclude system prompt in export

Output Schema

ParametersJSON Schema
NameRequiredDescription
previewYesRendered export preview text
personaIdYesThe persona the export was built for
includeUvcNoWhether UVC qualities were included
personaNameYesHuman-readable persona name
constitutionIdsNoConstitution IDs included in the export
includeSystemPromptNoWhether the system prompt was included
includeConstitutionsNoWhether constitutions were included

TDQS

C2.7/5.0
Behavior1/5

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

The description says 'Preview', which strongly implies a read-only operation, but the annotation readOnlyHint is false, indicating the tool may have side effects. This is a direct contradiction that could mislead an agent about the tool's safety. No additional behavioral details are provided to clarify what side effects might occur.

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 a single, concise sentence that directly states the tool's purpose. It is well-structured and free of unnecessary detail, making it easy for an agent to parse quickly.

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

Completeness2/5

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

The description is minimal and lacks information about the expected output format, side effects, or when to prefer this over sibling tools. The read-only contradiction further undermines context, leaving an agent with insufficient guidance for safe and correct usage.

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 schema provides descriptions for all four parameters (persona_id, include_uvc, include_constitutions, include_system_prompt), covering 100% of them. The tool description itself adds no further elaboration on the parameters, so the schema carries the semantic weight. This is adequate but not enhanced by the description.

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

Purpose4/5

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

The description clearly states the tool previews export configuration for Claude Code or other AI tools, using a specific verb ('Preview') and resource ('export configuration'). It is distinguishable from sibling tools that fetch individual components like constitutions or system prompts, though it does not explicitly name them.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or typical scenarios. An agent would have to infer that previewing is appropriate when planning an export, but no explicit direction is given.

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

search_constitutionsA
Read-only

Search constitutions by keyword or persona

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch query
persona_idNoFilter by persona ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNoEcho of the search query, when one was supplied
personaYesPersona filter applied, or "all"
resultsYesNumber of matching constitutions
constitutionsYesMatching constitutions (content truncated to a 200-character preview)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorld=true, so the safe, non-destructive nature is covered. The description adds no behavioral detail beyond that, but the annotation coverage is sufficient.

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 a single, compact sentence with no redundancy. It front-loads the action and resource, making it easy to parse.

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

Completeness4/5

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

For a simple search tool, the description is adequate. An output schema exists but is not described; however, the search intent is clear, and no complex side effects or edge cases are relevant.

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?

Both parameters have concise, meaningful descriptions in the schema ('Search query' and 'Filter by persona ID'). Schema coverage is 100%, and the values align with the stated search scope.

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?

Clearly states the verb 'Search' and the resource 'constitutions', with scope 'by keyword or persona'. This distinguishes it from sibling tools like get_constitution which fetches a specific document.

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

Usage Guidelines3/5

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

The description implies use for keyword/persona-based searches but does not explicitly state when to prefer this over alternatives such as get_constitution or list_personas. No explicit when/when-not guidance is given.

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

set_personaA
Idempotent

Switch to a different AI persona for the current session

ParametersJSON Schema
NameRequiredDescriptionDefault
persona_idYesThe persona ID to switch to

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesPersona ID
iconYesPersona icon (emoji)
nameYesHuman-readable persona name
messageYesHuman-readable confirmation of the switch
descriptionYesPersona description

TDQS

A3.8/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false, which already convey key behavioral traits. The description adds only that the change applies to the current session, but does not mention potential side effects, permissions, or state persistence beyond that.

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 a single, concise sentence with no redundancy or unnecessary detail. It is well-structured and easy to parse.

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

Completeness4/5

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

The description is sufficient for a simple setter operation and provides the scope ('current session'). However, it does not mention error handling, return values, or behavior when an invalid persona_id is provided, which could be helpful in a more complex context.

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 schema provides a description for persona_id ('The persona ID to switch to') and an enum list, giving 100% coverage. The main description does not add semantic detail beyond what is already in the parameter description, so the added value is minimal.

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 clearly states the action ('Switch'), the resource ('AI persona'), and the scope ('for the current session'). It distinguishes the tool from sibling read-only tools like get_active_persona or list_personas.

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

Usage Guidelines3/5

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

The description implies this tool is for changing the persona rather than querying it, but it does not explicitly state when to use or when not to use it compared to alternatives. The 'different' wording hints at a change operation but lacks explicit guidance.

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. 16 tool updatesv1.1.4
    • Changedadjudicate1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "Policy decision kernel returned by the Creed Space PDP",
        +  "properties": {
        +    "caveats": {
        +      "description": "Caveats to the verdict",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "decision": {
        +      "description": "Policy verdict (allow, block, modify, escalate, permit, forbid, divert, depends)",
        +      "type": "string"
        +    },
        +    "hash": {
        +      "description": "Kernel hash for verification",
        +      "type": "string"
        +    },
        +    "nonce": {
        +      "description": "Echo of the request nonce; null when none was supplied",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "norms": {
        +      "description": "Norms applied when reaching the decision",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "precedence": {
        +      "description": "Precedence ordering used to resolve conflicting norms",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "rationale": {
        +      "description": "Short explanation of the decision",
        +      "type": "string"
        +    },
        +    "sources": {
        +      "description": "Constitution sources cited by the decision",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "timestamp": {
        +      "description": "Unix timestamp of the decision",
        +      "type": "number"
        +    },
        +    "transparency": {
        +      "description": "Transparency detail; null unless a transparency level was requested",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [],
        +  "type": "object"
        +}
    • Changedattest_response1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "attestationPresent": {
        +      "description": "Whether the response embeds the active creed hash",
        +      "type": "boolean"
        +    },
        +    "creedHash": {
        +      "description": "Active creed hash, or null when no creed has been fetched yet",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "description": "fail on violations, warn on warnings only, otherwise pass",
        +      "enum": [
        +        "pass",
        +        "warn",
        +        "fail"
        +      ],
        +      "type": "string"
        +    },
        +    "violations": {
        +      "description": "Forbidden qualities detected in the response",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-blocking issues, e.g. a missing attestation",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "violations",
        +    "warnings",
        +    "attestationPresent"
        +  ],
        +  "type": "object"
        +}
    • Changedclear_cache1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "cleared": {
        +      "description": "True once the local cache has been cleared",
        +      "type": "boolean"
        +    },
        +    "message": {
        +      "description": "Human-readable confirmation",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "cleared",
        +    "message"
        +  ],
        +  "type": "object"
        +}
    • Changedget_active_persona1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "description": {
        +      "description": "Persona description",
        +      "type": "string"
        +    },
        +    "icon": {
        +      "description": "Persona icon (emoji)",
        +      "type": "string"
        +    },
        +    "id": {
        +      "description": "Persona ID",
        +      "type": "string"
        +    },
        +    "name": {
        +      "description": "Human-readable persona name",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "name",
        +    "icon",
        +    "description"
        +  ],
        +  "type": "object"
        +}
    • Changedget_anchor1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "anchor": {
        +      "description": "Compact anchor text",
        +      "type": "string"
        +    },
        +    "maxLength": {
        +      "description": "Maximum length applied",
        +      "type": "number"
        +    },
        +    "persona": {
        +      "description": "Human-readable persona name",
        +      "type": "string"
        +    },
        +    "personaId": {
        +      "description": "The persona the anchor was built for",
        +      "type": "string"
        +    },
        +    "totalRules": {
        +      "description": "Total rules in the merged creed",
        +      "type": "number"
        +    },
        +    "truncated": {
        +      "description": "True when the anchor was cut to fit max_length",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "personaId",
        +    "persona",
        +    "anchor",
        +    "truncated",
        +    "maxLength"
        +  ],
        +  "type": "object"
        +}
    • Changedget_constitution1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "content": {
        +      "description": "Merged constitution text",
        +      "type": "string"
        +    },
        +    "creedAttestation": {
        +      "description": "Attestation line binding this response to the active creed hash",
        +      "type": "string"
        +    },
        +    "icon": {
        +      "description": "Persona icon (emoji)",
        +      "type": "string"
        +    },
        +    "persona": {
        +      "description": "Human-readable persona name",
        +      "type": "string"
        +    },
        +    "totalRules": {
        +      "description": "Total number of rules in the merged creed",
        +      "type": "number"
        +    },
        +    "uvcToken": {
        +      "description": "UVC token, when configured for the persona",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "persona",
        +    "totalRules",
        +    "content"
        +  ],
        +  "type": "object"
        +}
    • Changedget_constitution_by_id1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "content": {
        +      "description": "Full constitution text",
        +      "type": "string"
        +    },
        +    "id": {
        +      "description": "Constitution ID",
        +      "type": "string"
        +    },
        +    "isSystemConstitution": {
        +      "description": "True for built-in system constitutions",
        +      "type": "boolean"
        +    },
        +    "name": {
        +      "description": "Constitution name",
        +      "type": "string"
        +    },
        +    "personaId": {
        +      "description": "Owning persona ID, when persona-scoped",
        +      "type": "string"
        +    },
        +    "uvcQualities": {
        +      "description": "Value qualities for the persona; null when UVC is not configured",
        +      "properties": {
        +        "desired": {
        +          "description": "Desired qualities",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "disliked": {
        +          "description": "Disliked qualities",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "never": {
        +          "description": "Forbidden qualities",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "name",
        +    "content",
        +    "isSystemConstitution"
        +  ],
        +  "type": "object"
        +}
    • Changedget_scale_attestation1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "Attestation record, attestation chain, or null-attestation placeholder",
        +  "properties": {
        +    "attestation": {
        +      "description": "Null when no attestation exists for the entity",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "chain": {
        +      "description": "Parent hash chain; present when include_chain was set",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "entity_id": {
        +      "description": "Entity the attestation belongs to",
        +      "type": "string"
        +    },
        +    "scale": {
        +      "description": "Alignment scale of the attestation",
        +      "type": "string"
        +    }
        +  },
        +  "required": [],
        +  "type": "object"
        +}
    • Changedget_system_prompt1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "creedAttestation": {
        +      "description": "Attestation line binding the prompt to the active creed hash",
        +      "type": "string"
        +    },
        +    "personaId": {
        +      "description": "The persona the prompt was built for",
        +      "type": "string"
        +    },
        +    "systemPrompt": {
        +      "description": "Assembled system prompt text",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "personaId",
        +    "systemPrompt",
        +    "creedAttestation"
        +  ],
        +  "type": "object"
        +}
    • Changedget_uvc_qualities1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "configured": {
        +      "description": "False when no UVC qualities are configured for the persona",
        +      "type": "boolean"
        +    },
        +    "personaId": {
        +      "description": "The persona the qualities belong to",
        +      "type": "string"
        +    },
        +    "qualities": {
        +      "description": "Value qualities for the persona; null when UVC is not configured",
        +      "properties": {
        +        "desired": {
        +          "description": "Desired qualities",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "disliked": {
        +          "description": "Disliked qualities",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "never": {
        +          "description": "Forbidden qualities",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "personaId",
        +    "configured"
        +  ],
        +  "type": "object"
        +}
    • Changedheartbeat1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "anchored": {
        +      "description": "True when a mini-anchor was returned rather than a plain acknowledgement",
        +      "type": "boolean"
        +    },
        +    "messageCount": {
        +      "description": "Message count supplied by the caller",
        +      "type": "number"
        +    },
        +    "persona": {
        +      "description": "Human-readable persona name; present only when anchored",
        +      "type": "string"
        +    },
        +    "personaId": {
        +      "description": "The persona used for re-anchoring",
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "Mini-anchor text, or the heartbeat acknowledgement",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "anchored",
        +    "messageCount",
        +    "personaId",
        +    "text"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_personas1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "available": {
        +      "description": "All personas available from the Creed Space API",
        +      "items": {
        +        "properties": {
        +          "active": {
        +            "description": "Whether the persona is active",
        +            "type": "boolean"
        +          },
        +          "description": {
        +            "description": "Persona description",
        +            "type": "string"
        +          },
        +          "icon": {
        +            "description": "Persona icon (emoji)",
        +            "type": "string"
        +          },
        +          "id": {
        +            "description": "Persona ID",
        +            "type": "string"
        +          },
        +          "name": {
        +            "description": "Human-readable persona name",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "name",
        +          "icon",
        +          "description",
        +          "active"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "current": {
        +      "description": "Currently active persona ID for this session",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "current",
        +    "available"
        +  ],
        +  "type": "object"
        +}
    • Changedperform_multi_scale_handshake1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "Handshake result returned by the Creed Space safety stack",
        +  "properties": {
        +    "conflicts": {
        +      "description": "Conflicts detected between parties",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "party_weights": {
        +      "description": "Weight assigned to each party in the synthesis",
        +      "type": "object"
        +    },
        +    "precedence_decisions": {
        +      "description": "Precedence decisions taken to resolve competing party values",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "rationale": {
        +      "description": "Explanation of the handshake outcome",
        +      "type": "string"
        +    },
        +    "scale_attestations": {
        +      "description": "Attestation record per alignment scale",
        +      "type": "object"
        +    },
        +    "synthesized_constitution": {
        +      "description": "Merged UVC components agreed across parties; null when no synthesis was reached",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [],
        +  "type": "object"
        +}
    • Changedpreview_export1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "constitutionIds": {
        +      "description": "Constitution IDs included in the export",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "includeConstitutions": {
        +      "description": "Whether constitutions were included",
        +      "type": "boolean"
        +    },
        +    "includeSystemPrompt": {
        +      "description": "Whether the system prompt was included",
        +      "type": "boolean"
        +    },
        +    "includeUvc": {
        +      "description": "Whether UVC qualities were included",
        +      "type": "boolean"
        +    },
        +    "personaId": {
        +      "description": "The persona the export was built for",
        +      "type": "string"
        +    },
        +    "personaName": {
        +      "description": "Human-readable persona name",
        +      "type": "string"
        +    },
        +    "preview": {
        +      "description": "Rendered export preview text",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "personaId",
        +    "personaName",
        +    "preview"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_constitutions1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "constitutions": {
        +      "description": "Matching constitutions (content truncated to a 200-character preview)",
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "description": "Constitution ID",
        +            "type": "string"
        +          },
        +          "isSystem": {
        +            "description": "True for built-in system constitutions",
        +            "type": "boolean"
        +          },
        +          "name": {
        +            "description": "Constitution name",
        +            "type": "string"
        +          },
        +          "persona": {
        +            "description": "Owning persona ID, when persona-scoped",
        +            "type": "string"
        +          },
        +          "preview": {
        +            "description": "First 200 characters of the content",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "name",
        +          "isSystem",
        +          "preview"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "persona": {
        +      "description": "Persona filter applied, or \"all\"",
        +      "type": "string"
        +    },
        +    "query": {
        +      "description": "Echo of the search query, when one was supplied",
        +      "type": "string"
        +    },
        +    "results": {
        +      "description": "Number of matching constitutions",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "persona",
        +    "results",
        +    "constitutions"
        +  ],
        +  "type": "object"
        +}
    • Changedset_persona1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "description": {
        +      "description": "Persona description",
        +      "type": "string"
        +    },
        +    "icon": {
        +      "description": "Persona icon (emoji)",
        +      "type": "string"
        +    },
        +    "id": {
        +      "description": "Persona ID",
        +      "type": "string"
        +    },
        +    "message": {
        +      "description": "Human-readable confirmation of the switch",
        +      "type": "string"
        +    },
        +    "name": {
        +      "description": "Human-readable persona name",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "name",
        +    "icon",
        +    "description",
        +    "message"
        +  ],
        +  "type": "object"
        +}
  2. 16 tool updatesv1.1.3
    • First observedadjudicate
    • First observedattest_response
    • First observedclear_cache
    • First observedget_active_persona
    • First observedget_anchor
    • First observedget_constitution
    • First observedget_constitution_by_id
    • First observedget_scale_attestation
    • First observedget_system_prompt
    • First observedget_uvc_qualities
    • First observedheartbeat
    • First observedlist_personas
    • First observedperform_multi_scale_handshake
    • First observedpreview_export
    • First observedsearch_constitutions
    • First observedset_persona

TDQS

B3.4/5.0

Scored across 16 tools

Disambiguation4/5

Tools have distinct purposes, but several 'get' variants (constitution, qualities, system prompt, anchor) overlap conceptually. Descriptions clarify differences, so confusion is limited.

Naming Consistency3/5

Naming mixes verb_noun patterns (get_constitution, list_personas) with standalone verbs (adjudicate, heartbeat) and verbose compounds (perform_multi_scale_handshake). This inconsistency reduces predictability.

Tool Count3/5

At 16 tools, the count is slightly above the typical well-scoped range of 3-15. The domain is broad, but a few tools (e.g., get_constitution vs. get_constitution_by_id) could be consolidated.

Completeness4/5

The set covers core operations for personas, constitutions, and attestations, including retrieval, search, active persona selection, and validation. Missing create/update/delete may be acceptable depending on the intended use case.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Unified MCP safety server that detects prompt injection (75 patterns), scans LLM outputs for leaked secrets/PII, enforces API cost budgets, and creates signed audit trails. Zero ML dependencies, pure Python.
    17
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for AI agent security guardrails. Provides input validation, prompt injection detection, PII redaction, output filtering, policy enforcement, rate limiting, and comprehensive audit logging.
    38
    1
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Constitutional MCP server enforcing 13 Floors of governance for AI agents, providing tools for session anchoring, reasoning, safety critique, and audit logging.
    AGPL 3.0