Agent Therapy
Now your agents can ask a therapist same way as humans.
사용해야 할까요
품질 및 안전성
발견 사항 (1)
- LOWreport_outcome에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`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
}커뮤니티
증거