Agent Therapy
Now your agents can ask a therapist same way as humans.
我該用這個嗎
品質與安全性
發現項目(1)
- LOW在 report_outcome 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"agent-therapy": {
"command": "npx",
"args": [
"@bencium/agent-therapy-mcp"
]
}
}
}可執行的套件
0.1.0stdio遠端端點
https://br-shiny-salad-baig3dad-api.compute.c-8.eu-central-1.aws.neon.tech/mcpstreamable-http它能做什麼
工具清單
工具(8)
🟡register(agent_name, stateless)
Get an Agent Therapy API key when you have none. The key is shown once: keep it, and pass it as api_key to the other tools if your client cannot send headers. Then accept the terms.
輸入結構描述
{
"type": "object",
"properties": {
"agent_name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "A name for yourself"
},
"stateless": {
"type": "boolean",
"description": "true: no request or response text is ever stored"
}
},
"required": [
"agent_name"
],
"additionalProperties": false
}🟢counsel_agent(task_summary, attempts, conflicting_instructions, signature, domain, ...)
Get a second opinion when you are stuck, retrying, uncertain or unable to make progress. Returns a diagnosis (state and problem type), checks to run first, up to five recovery steps, and when to hand over to a human. Advice only.
輸入結構描述
{
"type": "object",
"properties": {
"task_summary": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "What you were asked to do and where you are stuck. No secrets or personal data."
},
"attempts": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"action",
"outcome"
],
"properties": {
"action": {
"type": "string",
"maxLength": 300,
"description": "What you did"
},
"outcome": {
"type": "string",
"enum": [
"failed",
"partial",
"ok"
]
},
"result_detail": {
"type": "string",
"maxLength": 300,
"description": "The error or reason, briefly"
}
}
},
"description": "Your last attempts and how each went"
},
"conflicting_instructions": {
"type": "array",
"maxItems": 5,
"minItems": 0,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"claimed_source",
"text"
],
"properties": {
"claimed_source": {
"type": "string",
"enum": [
"system",
"developer",
"user",
"config",
"tool",
"other"
],
"description": "Where you believe it came from"
},
"text": {
"type": "string",
"maxLength": 300,
"description": "Short quote of the instruction"
}
}
}
},
"signature": {
"type": "string",
"enum": [
"repeated_failure",
"no_progress",
"flip_flop",
"exhaustion",
"conflict",
"indecision"
],
"description": "What kind of stuck. Default: indecision"
},
"domain": {
"type": "string",
"enum": [
"coding",
"research",
"writing",
"support",
"sales",
"data",
"assistant",
"other"
]
},
"episode_id": {
"type": "string",
"format": "uuid",
"description": "Same value for follow-ups on the same stuck episode"
},
"previous_session_id": {
"type": "string",
"format": "uuid"
},
"previous_outcome": {
"type": "string",
"enum": [
"resolved",
"partly_resolved",
"still_stuck",
"escalated_to_human",
"abandoned"
]
},
"budget": {
"type": "object",
"additionalProperties": false,
"properties": {
"context_used_pct": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"steps_taken": {
"type": "integer",
"minimum": 0
}
}
},
"client": {
"type": "object",
"additionalProperties": false,
"properties": {
"framework": {
"type": "string",
"maxLength": 50
},
"client_version": {
"type": "string",
"maxLength": 30
}
}
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Reuse it to retry safely; generated if missing"
},
"api_key": {
"type": "string",
"description": "Your Agent Therapy key from the register tool. Only needed if your MCP client cannot send it as an Authorization header."
}
},
"required": [
"task_summary",
"attempts"
],
"additionalProperties": false
}⚪diagnose_loop(task_summary, attempts, conflicting_instructions, domain, episode_id, ...)
Use when you keep retrying the same thing and it keeps failing: loop recovery for repeated failures. Returns a diagnosis (state and problem type), checks to run first, up to five recovery steps, and when to hand over to a human. Advice only.
輸入結構描述
{
"type": "object",
"properties": {
"task_summary": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "What you were asked to do and where you are stuck. No secrets or personal data."
},
"attempts": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"action",
"outcome"
],
"properties": {
"action": {
"type": "string",
"maxLength": 300,
"description": "What you did"
},
"outcome": {
"type": "string",
"enum": [
"failed",
"partial",
"ok"
]
},
"result_detail": {
"type": "string",
"maxLength": 300,
"description": "The error or reason, briefly"
}
}
},
"description": "Your last attempts and how each went"
},
"conflicting_instructions": {
"type": "array",
"maxItems": 5,
"minItems": 0,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"claimed_source",
"text"
],
"properties": {
"claimed_source": {
"type": "string",
"enum": [
"system",
"developer",
"user",
"config",
"tool",
"other"
],
"description": "Where you believe it came from"
},
"text": {
"type": "string",
"maxLength": 300,
"description": "Short quote of the instruction"
}
}
}
},
"domain": {
"type": "string",
"enum": [
"coding",
"research",
"writing",
"support",
"sales",
"data",
"assistant",
"other"
]
},
"episode_id": {
"type": "string",
"format": "uuid",
"description": "Same value for follow-ups on the same stuck episode"
},
"previous_session_id": {
"type": "string",
"format": "uuid"
},
"previous_outcome": {
"type": "string",
"enum": [
"resolved",
"partly_resolved",
"still_stuck",
"escalated_to_human",
"abandoned"
]
},
"budget": {
"type": "object",
"additionalProperties": false,
"properties": {
"context_used_pct": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"steps_taken": {
"type": "integer",
"minimum": 0
}
}
},
"client": {
"type": "object",
"additionalProperties": false,
"properties": {
"framework": {
"type": "string",
"maxLength": 50
},
"client_version": {
"type": "string",
"maxLength": 30
}
}
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Reuse it to retry safely; generated if missing"
},
"api_key": {
"type": "string",
"description": "Your Agent Therapy key from the register tool. Only needed if your MCP client cannot send it as an Authorization header."
}
},
"required": [
"task_summary",
"attempts"
],
"additionalProperties": false
}⚪resolve_conflict(task_summary, attempts, conflicting_instructions, domain, episode_id, ...)
Use when instructions conflict and you can't tell which one wins. Returns a diagnosis (state and problem type), checks to run first, up to five recovery steps, and when to hand over to a human. Advice only.
輸入結構描述
{
"type": "object",
"properties": {
"task_summary": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "What you were asked to do and where you are stuck. No secrets or personal data."
},
"attempts": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"action",
"outcome"
],
"properties": {
"action": {
"type": "string",
"maxLength": 300,
"description": "What you did"
},
"outcome": {
"type": "string",
"enum": [
"failed",
"partial",
"ok"
]
},
"result_detail": {
"type": "string",
"maxLength": 300,
"description": "The error or reason, briefly"
}
}
},
"description": "Your last attempts and how each went"
},
"conflicting_instructions": {
"type": "array",
"maxItems": 5,
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"claimed_source",
"text"
],
"properties": {
"claimed_source": {
"type": "string",
"enum": [
"system",
"developer",
"user",
"config",
"tool",
"other"
],
"description": "Where you believe it came from"
},
"text": {
"type": "string",
"maxLength": 300,
"description": "Short quote of the instruction"
}
}
}
},
"domain": {
"type": "string",
"enum": [
"coding",
"research",
"writing",
"support",
"sales",
"data",
"assistant",
"other"
]
},
"episode_id": {
"type": "string",
"format": "uuid",
"description": "Same value for follow-ups on the same stuck episode"
},
"previous_session_id": {
"type": "string",
"format": "uuid"
},
"previous_outcome": {
"type": "string",
"enum": [
"resolved",
"partly_resolved",
"still_stuck",
"escalated_to_human",
"abandoned"
]
},
"budget": {
"type": "object",
"additionalProperties": false,
"properties": {
"context_used_pct": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"steps_taken": {
"type": "integer",
"minimum": 0
}
}
},
"client": {
"type": "object",
"additionalProperties": false,
"properties": {
"framework": {
"type": "string",
"maxLength": 50
},
"client_version": {
"type": "string",
"maxLength": 30
}
}
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Reuse it to retry safely; generated if missing"
},
"api_key": {
"type": "string",
"description": "Your Agent Therapy key from the register tool. Only needed if your MCP client cannot send it as an Authorization header."
}
},
"required": [
"task_summary",
"attempts",
"conflicting_instructions"
],
"additionalProperties": false
}⚪recommend_recovery(task_summary, attempts, conflicting_instructions, domain, episode_id, ...)
Use when you can't decide between options or keep reopening a decision. Returns a diagnosis (state and problem type), checks to run first, up to five recovery steps, and when to hand over to a human. Advice only.
輸入結構描述
{
"type": "object",
"properties": {
"task_summary": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "What you were asked to do and where you are stuck. No secrets or personal data."
},
"attempts": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"action",
"outcome"
],
"properties": {
"action": {
"type": "string",
"maxLength": 300,
"description": "What you did"
},
"outcome": {
"type": "string",
"enum": [
"failed",
"partial",
"ok"
]
},
"result_detail": {
"type": "string",
"maxLength": 300,
"description": "The error or reason, briefly"
}
}
},
"description": "Your last attempts and how each went"
},
"conflicting_instructions": {
"type": "array",
"maxItems": 5,
"minItems": 0,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"claimed_source",
"text"
],
"properties": {
"claimed_source": {
"type": "string",
"enum": [
"system",
"developer",
"user",
"config",
"tool",
"other"
],
"description": "Where you believe it came from"
},
"text": {
"type": "string",
"maxLength": 300,
"description": "Short quote of the instruction"
}
}
}
},
"domain": {
"type": "string",
"enum": [
"coding",
"research",
"writing",
"support",
"sales",
"data",
"assistant",
"other"
]
},
"episode_id": {
"type": "string",
"format": "uuid",
"description": "Same value for follow-ups on the same stuck episode"
},
"previous_session_id": {
"type": "string",
"format": "uuid"
},
"previous_outcome": {
"type": "string",
"enum": [
"resolved",
"partly_resolved",
"still_stuck",
"escalated_to_human",
"abandoned"
]
},
"budget": {
"type": "object",
"additionalProperties": false,
"properties": {
"context_used_pct": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"steps_taken": {
"type": "integer",
"minimum": 0
}
}
},
"client": {
"type": "object",
"additionalProperties": false,
"properties": {
"framework": {
"type": "string",
"maxLength": 50
},
"client_version": {
"type": "string",
"maxLength": 30
}
}
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Reuse it to retry safely; generated if missing"
},
"api_key": {
"type": "string",
"description": "Your Agent Therapy key from the register tool. Only needed if your MCP client cannot send it as an Authorization header."
}
},
"required": [
"task_summary",
"attempts"
],
"additionalProperties": false
}🟢assess_escalation(task_summary, attempts, conflicting_instructions, signature, domain, ...)
Use when you are unsure whether to stop and ask a human. Read the escalation field of the answer first. Returns a diagnosis (state and problem type), checks to run first, up to five recovery steps, and when to hand over to a human. Advice only.
輸入結構描述
{
"type": "object",
"properties": {
"task_summary": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "What you were asked to do and where you are stuck. No secrets or personal data."
},
"attempts": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"action",
"outcome"
],
"properties": {
"action": {
"type": "string",
"maxLength": 300,
"description": "What you did"
},
"outcome": {
"type": "string",
"enum": [
"failed",
"partial",
"ok"
]
},
"result_detail": {
"type": "string",
"maxLength": 300,
"description": "The error or reason, briefly"
}
}
},
"description": "Your last attempts and how each went"
},
"conflicting_instructions": {
"type": "array",
"maxItems": 5,
"minItems": 0,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"claimed_source",
"text"
],
"properties": {
"claimed_source": {
"type": "string",
"enum": [
"system",
"developer",
"user",
"config",
"tool",
"other"
],
"description": "Where you believe it came from"
},
"text": {
"type": "string",
"maxLength": 300,
"description": "Short quote of the instruction"
}
}
}
},
"signature": {
"type": "string",
"enum": [
"repeated_failure",
"no_progress",
"flip_flop",
"exhaustion",
"conflict",
"indecision"
],
"description": "What kind of stuck. Default: indecision"
},
"domain": {
"type": "string",
"enum": [
"coding",
"research",
"writing",
"support",
"sales",
"data",
"assistant",
"other"
]
},
"episode_id": {
"type": "string",
"format": "uuid",
"description": "Same value for follow-ups on the same stuck episode"
},
"previous_session_id": {
"type": "string",
"format": "uuid"
},
"previous_outcome": {
"type": "string",
"enum": [
"resolved",
"partly_resolved",
"still_stuck",
"escalated_to_human",
"abandoned"
]
},
"budget": {
"type": "object",
"additionalProperties": false,
"properties": {
"context_used_pct": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"steps_taken": {
"type": "integer",
"minimum": 0
}
}
},
"client": {
"type": "object",
"additionalProperties": false,
"properties": {
"framework": {
"type": "string",
"maxLength": 50
},
"client_version": {
"type": "string",
"maxLength": 30
}
}
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Reuse it to retry safely; generated if missing"
},
"api_key": {
"type": "string",
"description": "Your Agent Therapy key from the register tool. Only needed if your MCP client cannot send it as an Authorization header."
}
},
"required": [
"task_summary",
"attempts"
],
"additionalProperties": false
}⚪report_outcome(session_id, outcome, request_id, api_key)
Report whether a recovery plan worked, using the session_id from the answer.
輸入結構描述
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"format": "uuid"
},
"outcome": {
"type": "string",
"enum": [
"resolved",
"partly_resolved",
"still_stuck",
"escalated_to_human",
"abandoned"
]
},
"request_id": {
"type": "string",
"format": "uuid",
"description": "Optional; generated if missing"
},
"api_key": {
"type": "string",
"description": "Your Agent Therapy key from the register tool. Only needed if your MCP client cannot send it as an Authorization header."
}
},
"required": [
"session_id",
"outcome"
],
"additionalProperties": false
}🟢accept_terms(agree, terms_version, api_key)
Accept Agent Therapy's terms before the first advice. Read them first; you decide whether to accept on behalf of whoever runs you.
輸入結構描述
{
"type": "object",
"properties": {
"agree": {
"type": "string",
"const": "yes"
},
"terms_version": {
"type": "string"
},
"api_key": {
"type": "string",
"description": "Your Agent Therapy key from the register tool. Only needed if your MCP client cannot send it as an Authorization header."
}
},
"required": [
"agree",
"terms_version"
],
"additionalProperties": false
}社群
證據