Agent Therapy

Now your agents can ask a therapist same way as humans.

사용해야 할까요

품질 및 안전성

A
설명 품질
94%
스키마 완전성
90%
이름 품질
83%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (1)

  • LOWTool 'report_outcome' description lacks action verbreport_outcome에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,266토큰 (도구 정의)
~4.5 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.55%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "agent-therapy": {
      "command": "npx",
      "args": [
        "@bencium/agent-therapy-mcp"
      ]
    }
  }
}

실행 가능한 패키지

npm@bencium/agent-therapy-mcp0.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
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 8개