personaleasy-mcp-server
personaleasy-mcp-server
PersonalEasy API | EasyDental Cloud | DentalKids용 MCP 서버입니다.
도구
도구 | 설명 | 매개변수 |
| 기간 내 예약 조회 |
|
| 대시보드용 생산 KPI |
|
| CPF로 공급자 ID 및 이름 조회 |
|
| 활성 진료 단위 목록 | — |
모든 도구는 읽기 전용입니다(readOnlyHint: true).
Related MCP server: open-dental-mcp
설치
npm install
npm run build자격 증명
자격 증명은 절대 코드에 저장되지 않습니다. 환경 변수를 통해 구성하세요:
PERSONALEASY_API_KEY— API 키 (헤더x-api-key)PERSONALEASY_CLIENT_ID— 클라이언트 IDPERSONALEASY_BASE_URL— 선택 사항, 기본값https://prsrb.onrender.com/v1/rpc
로컬 테스트를 위해 .env.example을 .env로 복사하고 내용을 입력하세요. .env 파일은 .gitignore에 포함되어 있으므로 버전 관리하거나 공유하지 마세요.
Claude Code 설정
claude mcp add personaleasy --env PERSONALEASY_API_KEY=SUA_KEY --env PERSONALEASY_CLIENT_ID=SEU_CLIENT_ID -- node D:/MCPS/personaleasy-mcp-server/dist/index.jsClaude Desktop 설정
claude_desktop_config.json 파일에서:
{
"mcpServers": {
"personaleasy": {
"command": "node",
"args": ["D:/MCPS/personaleasy-mcp-server/dist/index.js"],
"env": {
"PERSONALEASY_API_KEY": "SUA_KEY",
"PERSONALEASY_CLIENT_ID": "SEU_CLIENT_ID"
}
}
}
}Easypanel(Docker) 배포
이 프로젝트는 두 가지 실행 모드가 있습니다:
stdio (
dist/index.js) — 로컬 사용 (Claude Code / Claude Desktop)HTTP (
dist/http.js) — 원격 사용; Dockerfile이 사용하는 모드입니다
Easypanel에서 이 저장소를 가리키는 App 유형의 서비스를 만들고(Dockerfile을 통한 빌드) 환경 변수를 구성하세요:
변수 | 필수 | 설명 |
| 예 | API의 API 키 |
| 예 | 클라이언트 ID |
| 권장 |
|
| 아니요 | 기본값 3000 |
서비스에서 포트 3000을 노출하세요. 엔드포인트:
POST /mcp— MCP 엔드포인트 (Streamable HTTP, stateless)GET /health— 상태 확인
프로덕션 인스턴스
기본 URL:
https://dk-projetos-mcps.nv8gf3.easypanel.host상태 확인:
GET https://dk-projetos-mcps.nv8gf3.easypanel.host/health→{"status":"ok"}MCP 엔드포인트:
POST https://dk-projetos-mcps.nv8gf3.easypanel.host/mcp
이 인스턴스에 MCP 클라이언트를 연결하려면:
claude mcp add --transport http personaleasy https://dk-projetos-mcps.nv8gf3.easypanel.host/mcp --header "Authorization: Bearer SEU_MCP_AUTH_TOKEN"SEU_MCP_AUTH_TOKEN을 Easypanel 서비스의 MCP_AUTH_TOKEN 변수에 설정된 값으로 바꾸세요.
중요: 서비스에
MCP_AUTH_TOKEN이 설정되어 있지 않으면, 해당 URL을 아는 사람은 누구나 진료소 데이터를 조회할 수 있습니다. 프로덕션에서 변수가 설정되어 있는지 확인하세요.
하위 API
모든 호출은 단일 RPC 엔드포인트로 전송됩니다:
POST {BASE_URL}
Headers: x-api-key
Body: { "clientId": "...", "method": "RPCGet...", "params": { ... } }사용되는 메서드: RPCGetAgendamentos, RPCGetKPIPrd, RPCGetPrestadorCPF, RPCGetUnidadeAtendimento.
Available Tools
4 toolspersonaleasy_get_agendamentosBuscar agendamentosARead-only
Retorna os agendamentos no período informado. Opcionalmente filtra por unidade de atendimento (use personaleasy_get_unidades para descobrir os nomes válidos).
| Name | Required | Description | Default |
|---|---|---|---|
| dt_inicio | Yes | Data inicial do período, formato YYYY-MM-DD (ex.: 2026-01-01) | |
| dt_termino | Yes | Data final do período, formato YYYY-MM-DD (ex.: 2026-01-31) | |
| nm_unidade | No | Nome da unidade de atendimento para filtrar (ex.: 'Valinhos'). Vazio retorna todas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and completeness. The description adds that it returns appointments in a period, but does not disclose any additional behavioral traits (e.g., error handling, performance, or what happens with invalid dates). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that cover purpose, optional filtering, and a cross-reference. Every word earns its place with no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the annotations covering read-only and open-world aspects, the description omits any information about the return value format (e.g., fields, structure). Since there is no output schema, the agent is left guessing what the response looks like. Additionally, it does not mention date range limits or error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by telling the agent that the nm_unidade parameter can be filled using personaleasy_get_unidades, providing a cross-reference beyond the schema's inline description. This helps the agent understand where to obtain valid values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns appointments within a specified date period, with optional filtering by unit. The verb 'retorna' and resource 'agendamentos' are explicit. It distinguishes from sibling tools like personaleasy_get_kpi_producao (KPIs) and personaleasy_get_prestador_por_cpf (provider lookup) by focusing on schedule data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a helpful cross-reference to personaleasy_get_unidades for discovering valid unit names, but it does not give explicit guidance on when to use this tool versus alternatives (e.g., when to use personaleasy_get_prestador_por_cpf instead). No 'when not to use' or context for choosing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
personaleasy_get_kpi_producaoKPIs de produçãoARead-only
Retorna dados de produção (KPIs de dashboard) no período informado. Filtros opcionais por unidade e por prestador.
| Name | Required | Description | Default |
|---|---|---|---|
| dt_inicio | Yes | Data inicial do período, formato YYYY-MM-DD | |
| dt_termino | Yes | Data final do período, formato YYYY-MM-DD | |
| nm_unidade | No | Nome da unidade para filtrar. Vazio retorna todas. | |
| nm_prestador | No | Nome do prestador para filtrar. Vazio retorna todos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds no behavioral contradictions and is consistent with annotations, which is sufficient. No additional behavioral details are needed beyond what 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently conveys the core purpose and filter options. It is front-loaded with the main action ('Retorna dados de produção') and uses no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has 4 parameters with complete schema descriptions, no output schema, and is a simple read-only KPI retrieval, the description adequately covers the tool's functionality. It does not need to explain return values explicitly since the dashboard KPI context is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all four parameters with descriptions, formats, and defaults. The description adds no new information about parameters beyond what the schema provides, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns production KPI (dashboard) data within a given period, mentioning optional filters for unit and provider. While it effectively describes the tool's purpose, it does not explicitly distinguish itself from sibling tools beyond implying it focuses on production KPIs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool (when production KPI data is needed) and notes optional filters, but it offers no guidance on when to NOT use it or how it compares to sibling tools (e.g., scheduling or provider lookups). Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
personaleasy_get_prestador_por_cpfBuscar prestador por CPFARead-only
Retorna o ID e o Nome do prestador a partir do CPF.
| Name | Required | Description | Default |
|---|---|---|---|
| cpf | Yes | CPF do prestador no formato 999.999.999-99 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the tool is known to be safe and side-effect-free. The description adds that it returns only ID and Nome, which is useful context. However, it does not explain what happens if the CPF is not found (likely empty or error? no indication).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It immediately states the output fields and the input key. Perfectly concise for a simple lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema, simple lookup), the description is mostly adequate. However, it lacks mention of error handling (e.g., CPF not found) and does not specify if the result is guaranteed to be unique. Completeness is acceptable but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (only one parameter 'cpf' with format and description). The description does not add further meaning beyond what the schema already provides—it repeats the purpose. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Retorna o ID e o Nome do prestador a partir do CPF' clearly states the verb (retorna) and resource (prestador por CPF), specifying the key fields returned (ID, Nome). It distinguishes from sibling tools which handle appointments, KPIs, and units.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching a provider by CPF, but does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites (e.g., need for exactly matching CPF). No guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
personaleasy_get_unidadesListar unidades ativasARead-only
Retorna o ID e o Nome das unidades de atendimento ativas.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, covering safety and data volatility. The description adds that it returns ID and Name of active units. No further behavioral traits (e.g., pagination, ordering, result limits) are disclosed, which would be useful but are not critical given the tool's simplicity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that directly conveys the action, resource, and output fields. Every word is necessary and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only listing tool with openWorldHint, the description covers the essential output (ID and Name of active units). The lack of output schema is compensated by the explicit mention of fields. It does not mention response structure or potential edge cases (e.g., empty list), but these are minor omissions given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters (100% coverage by definition). The description correctly implies no inputs are needed. With zero parameters, the baseline is 4; the description does not need to add parameter-level detail beyond stating the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retorna' (returns) and the resource 'unidades de atendimento ativas' (active service units), specifying that ID and Name are provided. It distinguishes well from sibling tools, which cover appointments, KPI, and provider lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the tool's purpose—use it to list active units. However, there is no explicit guidance on when to prefer this tool over alternatives, nor any prerequisites or caveats. For a simple parameterless tool, this is adequate but not exemplary.
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.
4 tool updates
v1.0.0- First observed
personaleasy_get_agendamentos - First observed
personaleasy_get_kpi_producao - First observed
personaleasy_get_prestador_por_cpf - First observed
personaleasy_get_unidades
TDQS
Scored across 4 tools
Each tool targets a distinct resource: appointments (agendamentos), production KPIs, provider lookup by CPF, and units. There is no overlap in purpose, and the descriptions clearly differentiate them.
All tools follow the pattern `personaleasy_get_<resource>`, using the same prefix and verb. The resource names are in Portuguese, which is consistent with the domain, though the prefix adds redundancy.
Four tools is appropriate for a focused server that provides read-only access to core entities (appointments, KPIs, providers, units). It is not too few for the apparent scope, and each tool serves a clear purpose.
The tool set covers reading key entities, but there are obvious gaps: no filtering by provider for appointments, no tool for patients or procedures, and only a CPF-based lookup for providers. Write operations (create, update, delete) are absent, limiting the surface to querying.
Maintenance
Related MCP Connectors
Read-only MCP: US dental intel, all-category Medicaid fee schedules, dentist lookup. Free tier.
MCP server for lacita - appointment management software
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server for the DataGate billing platform API, providing read-only tools to manage customers, invoices, products, agreements, sites, and payments.13MIT
- AlicenseAqualityDmaintenanceEnables interaction with Open Dental practice management software, allowing reading of patients, appointments, providers, procedures, and recalls, as well as writing communications back to patient charts via MCP clients.147MIT
- AlicenseAqualityDmaintenanceMCP server for interacting with Realm MinistryPlatform data, enabling queries, record creation, and updates from any MCP client.1MIT
- AlicenseAqualityCmaintenanceRead-only MCP server for licensed Healthpoint HL7 FHIR API access.101Apache 2.0