Skip to main content
Glama
Oleksandr-Kliuiev

poweroffice-mcp

PowerOffice MCP for Codex

Codex가 PowerOffice Go API v2에 안전하게 접근할 수 있도록 하는 로컬 MCP 서버로, 읽기 전용 및 명시적으로 확인된 쓰기 작업을 지원합니다. 이 서버는 DEMO API에서 작동하며 OAuth 2.0 Client Credentials를 사용하고, 범용 HTTP 프록시 대신 작고 명확하게 제한된 도구를 제공합니다.

현재 사용 가능한 기능

  • poweroffice_configuration_status — 구성이 있는지 확인하며 키 값은 노출하지 않습니다.

  • poweroffice_connection_info — 연결을 확인하고 사용 가능한 통합/권한을 반환합니다.

  • poweroffice_search_customers — 필터와 페이지네이션으로 고객을 검색합니다.

  • poweroffice_get_customer — 숫자 ID로 단일 고객을 조회합니다.

  • poweroffice_list_general_ledger_accounts — 계정과목표를 읽습니다.

  • poweroffice_list_account_transactions — 필수 날짜 범위의 거래 내역을 읽습니다.

  • poweroffice_create_customer — confirm=true 후 고객을 생성합니다.

  • poweroffice_update_customer — confirm=true 후 허용된 JSON Patch를 고객에게 적용합니다.

  • poweroffice_create_general_ledger_account — confirm=true 후 계정을 생성합니다.

  • poweroffice_update_general_ledger_account — confirm=true 후 허용된 JSON Patch를 계정에 적용합니다.

읽기 도구는 읽기 전용으로 유지됩니다. 쓰기 도구는 명시적인 confirm=true가 있을 때만 데이터를 변경합니다. 문서 삭제, 전기, 전송 작업은 이 단계에 포함되지 않습니다.

Related MCP server: dooray-mcp-link

요구 사항

  • Node.js 22 이상

  • pnpm 11

  • PowerOffice application key, client key 및 subscription key

  • 호출하는 엔드포인트에 필요한 access roles

설치

pnpm install
cp .env.example .env.local
pnpm build
pnpm test

로컬에서 .env.local을 작성하세요:

PO_ENV=demo
PO_APPLICATION_KEY=...
PO_CLIENT_KEY=...
PO_SUBSCRIPTION_KEY=...
PO_USER_AGENT=poweroffice-mcp/0.1 your-email@example.com

.env.local은 Git에서 제외됩니다. 키를 채팅에 보내지 말고 .codex/config.toml에 추가하지 마세요.

Codex에 연결

프로젝트 파일 .codex/config.toml은 이미 빌드된 dist/index.js를 STDIO를 통해 실행합니다. 파일이 존재하면 .env.local을 읽으며, 위에 나열된 변수를 Codex 프로세스의 환경에서 가져올 수도 있습니다.

pnpm build 후 이 프로젝트의 Codex 태스크를 다시 시작하세요. 먼저 poweroffice_configuration_status를 호출한 다음 poweroffice_connection_info를 호출하세요.

로컬 개발

pnpm dev
pnpm typecheck
pnpm test
pnpm build
pnpm smoke

서버는 stdout에 MCP 메시지만 쓰고, 시작 오류는 stderr로 출력됩니다. 토큰은 만료 전 여유를 두고 캐시되며, 401 발생 시 토큰을 한 번 갱신하고, 429 발생 시 읽기 요청에 대해 최소 1초 지연으로 최대 두 번 재시도합니다. 쓰기 요청은 중복을 만들지 않도록 자동으로 재시도하지 않습니다. 전체 요청 빈도는 PO_MAX_REQUESTS_PER_SECOND 값으로 제한되며 10을 초과할 수 없습니다.

환경 변수

변수

필수

기본값

PO_ENV

아니요

demo

PO_APPLICATION_KEY

예

—

PO_CLIENT_KEY

예

—

PO_SUBSCRIPTION_KEY

예

—

PO_USER_AGENT

아니요

poweroffice-mcp/0.1

PO_REQUEST_TIMEOUT_MS

아니요

30000

PO_MAX_REQUESTS_PER_SECOND

아니요

10

프로덕션에서는 PO_ENV=production으로 전환하세요. 토큰 및 API URL은 코드에서 선택되며 사용자가 입력하지 않습니다.

MVP 경계

  • PowerOffice API v2 및 STDIO 전송만 지원합니다.

  • Webhook, 전체 페이지 자동 탐색, 문서 삭제, 전기 및 전송 작업은 없습니다.

  • 쓰기 도구는 Customers 및 GeneralLedgerAccounts로 제한되며 confirm=true가 필요합니다.

  • Fields 필드는 재정의할 수 있지만 기본적으로 서버는 간결한 데이터 세트를 요청합니다.

  • 다음 페이지는 항상 pageNumber를 통해 명시적으로 요청되며, X-Pagination 헤더 메타데이터가 결과와 함께 반환됩니다.

문서: PowerOffice Developer Portal, Codex의 MCP.

Available Tools

10 tools
poweroffice_configuration_statusPowerOffice configuration statusA
Read-onlyIdempotent

Check whether the PowerOffice MCP process has the required environment variables. Does not reveal credential values and does not call PowerOffice.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
configuredYes
environmentYes
missingVariablesYes

TDQS

A4.7/5.0
Behavior5/5

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

The description adds meaningful behavioral context beyond annotations: it explicitly promises not to reveal credential values and not to call PowerOffice. This is important trust and safety information that annotations alone do not convey, fully aligning with the readOnly, idempotent, and non-destructive hints.

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?

Two concise sentences with no filler: the first states the primary purpose, and the second adds two important behavioral exclusions. Every word earns its place.

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 zero parameters, a present output schema, and annotations covering safety, the description is complete. It explains what the tool checks, what it does not reveal, and the fact that it makes no external calls, leaving no material gaps for an agent selecting or invoking it.

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 tool has zero parameters and the schema coverage is 100%, so there is no additional parameter meaning to explain. The baseline of 4 applies, and the description appropriately focuses on behavior rather than parameters.

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 action ('Check whether the PowerOffice MCP process has the required environment variables') on a specific resource, making the tool's purpose immediately clear. It also distinguishes itself from sibling tools by focusing on configuration readiness rather than connection details or data operations.

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 implicitly establishes when to use this tool: as a preflight configuration check before invoking PowerOffice tools. The statement 'Does not call PowerOffice' clarifies it can be safely used for diagnostics without side effects, though it does not explicitly compare itself to alternatives like poweroffice_connection_info.

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

poweroffice_connection_infoPowerOffice connection and privilegesA
Read-onlyIdempotent

Call GET /ClientIntegrationInformation to verify authentication and return the client subscriptions and API privileges granted to the configured integration.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
apiBaseUrlYes
environmentYes
integrationYes

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, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so no contradiction exists. The description adds the endpoint and the returned data (subscriptions, API privileges), which is useful context, but it does not disclose details like error behavior or authentication failure semantics.

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 exact HTTP verb and endpoint, then states the purpose and return value. There is no wasted language or redundant information.

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?

For a no-input, read-only tool with rich annotations and an existing output schema, the description is complete enough to guide invocation. It names the endpoint, explains the purpose, and states what information is returned, which is sufficient for an agent to use it correctly.

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 and the schema coverage is complete, so the description carries no parameter burden. A 0-parameter tool with an empty schema gets a baseline of 4; the description appropriately focuses on behavior and result rather than parameters.

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 verb ('Call GET /ClientIntegrationInformation') and the resource, plus the purpose: verifying authentication and returning client subscriptions and API privileges. It is clear and distinct in meaning, though it does not explicitly differentiate itself from the similarly named sibling poweroffice_configuration_status.

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 the tool is used to verify authentication and check privileges, but it gives no explicit guidance on when to use it versus alternatives, nor any exclusion criteria. There is no mention of how this relates to poweroffice_configuration_status or when a connection check is appropriate.

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

poweroffice_create_customerCreate a PowerOffice customerA

Create one customer with POST /Customers. This writes to the configured PowerOffice client. Set confirm=true only after the user has explicitly approved the exact customer data.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired explicit confirmation that this exact customer may be created
customerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resourceYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is a write operation and not idempotent. The description adds valuable behavioral context beyond that: it writes to the configured PowerOffice client and requires explicit user approval before confirm=true. No contradiction with annotations was found.

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 two short sentences, front-loads the core action, and each sentence earns its place. The approval warning is critical and placed at the end without unnecessary padding.

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 that a detailed output schema exists and annotations cover the write/non-idempotent behavior, the description is largely sufficient. It captures the essential operational context: endpooint, target client, and the mandatory user-approval condition. It does not explain duplicate risk explicitly, but the non-idempotent annotation covers that.

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 50%, with confirm documented but customer not described. The description adds useful meaning for confirm ('only after the user has explicitly approved the exact customer data') but does not clarify semantics of the large customer object beyond what the schema's field names and constraints already convey.

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 action ('Create one customer'), a concrete HTTP resource ('POST /Customers'), and a clear scope ('one customer'). This clearly distinguishes it from siblings like update_customer, search_customers, and get_customer without needing to open the schema.

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 gives clear context for when to use the tool: creating exactly one customer, and it adds a critical usage guardrail around confirm=true. However, it does not explicitly name alternatives such as update_customer for existing customers or search_customers for lookups, so exclusion guidance is absent.

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

poweroffice_create_general_ledger_accountCreate a PowerOffice general ledger accountA

Create one general ledger account with POST /GeneralLedgerAccounts. VatCode or VatCodeId is required. Set confirm=true only after the user has explicitly approved the exact account data.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
confirmYesRequired explicit confirmation that this exact account may be created

Output Schema

ParametersJSON Schema
NameRequiredDescription
resourceYes

TDQS

A4.2/5.0
Behavior4/5

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

Adds meaningful behavior beyond the annotations by identifying the HTTP POST endpoint and, more importantly, the consent gate: confirm=true must only be set after explicit user approval. This is consistent with readOnlyHint=false and adds a practical safety constraint not present in the structured fields.

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?

Two sentences carry the endpoint, a required-field rule, and a confirmation safeguard. Every sentence earns its place, and the most important operational constraint is front-loaded.

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 nested-object creation tool, the description covers the critical details needed to invoke it: endpoint, required VatCode/VatCodeId, and the confirmation gate. Output schema handles return values, and the remaining gaps are minor relative to the annotation coverage.

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 only 50%, and the description partly compensates by adding the external requirement that VatCode or VatCodeId be provided. However, the many nested account fields still lack explanatory context, so the description does not fully bridge the gap between the schema and the API's actual requirements.

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?

States the operation explicitly: 'Create one general ledger account with POST /GeneralLedgerAccounts.' The endpoint and resource make it clear which action is performed and distinguish it from siblings like poweroffice_list_general_ledger_accounts and poweroffice_update_general_ledger_account.

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?

Provides clear usage context: VatCode or VatCodeId is required, and confirm=true is only allowed after explicit user approval of the exact account data. It does not explicitly name alternative tools or when-not-to-use conditions, so it stops short of a 5.

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

poweroffice_get_customerGet a PowerOffice customerA
Read-onlyIdempotent

Read one customer by PowerOffice numeric ID from GET /Customers/{id}. Returns a compact field set unless Fields is supplied.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
fieldsNoPowerOffice Fields expression. Omit for the MCP compact default

Output Schema

ParametersJSON Schema
NameRequiredDescription
customerYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral context by noting the compact default field set and the effect of supplying Fields. It does not discuss error behavior or auth, but for a simple read with strong annotations this 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?

Two tightly written sentences with no filler. The core operation and endpoint are front-loaded, and the field-set behavior is stated in a single follow-up sentence. Every word earns its place.

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?

The tool is simple: one required ID parameter and one optional fields parameter. The description addresses both, names the endpoint, and the output schema covers return values. Nothing critical is missing for an agent to call this tool correctly.

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?

Schema coverage is only 50% because id lacks a description. The description compensates by explaining that id is the PowerOffice numeric ID and by clarifying that fields controls whether the compact or full field set is returned. This adds meaningful semantics beyond the raw schema.

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 ('Read'), a specific resource ('one customer by PowerOffice numeric ID'), and the exact endpoint ('GET /Customers/{id}'). This clearly distinguishes the tool from siblings like poweroffice_search_customers, poweroffice_create_customer, and poweroffice_update_customer.

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 clearly implies usage when you already have a PowerOffice numeric ID and need a single customer. It does not explicitly mention alternatives or when not to use the tool, but the context is clear enough for an agent to select it over search or mutation tools.

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

poweroffice_list_account_transactionsList PowerOffice account transactionsA
Read-onlyIdempotent

Read posted account transactions from GET /AccountTransactions for an inclusive date range. Use filters and small pages to keep accounting queries narrow.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoPowerOffice Fields expression. Omit for the MCP compact default
toDateYesInclusive posting date, YYYY-MM-DD
orderByNoPowerOffice OrderBy expression
fromDateYesInclusive posting date, YYYY-MM-DD
pageSizeNo
vatCodesNoVAT codes, comma separated
accountNosNoAccount numbers or ranges, for example 1000-1999,2500,3000-
pageNumberNo
voucherNosNoVoucher numbers or ranges in PowerOffice syntax
productCodesNoProduct codes, comma separated
projectCodesNoProject codes, comma separated
voucherTypesNoVoucher types, comma separated
departmentCodesNoDepartment codes, comma separated
includeSubProjectNo
useDatabaseValidationNo
agricultureDepartmentsNo
createdDateTimeOffsetGreaterThanNoOnly entries created after this ISO timestamp
lastChangedDateTimeOffsetGreaterThanNoOnly entries changed after this ISO timestamp

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
paginationNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds behavioral context beyond the annotations by noting the inclusive date range and advising narrow queries, which signals that this operation can be expensive if not filtered. This is consistent with the 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 two concise sentences. The first sentence states the action and resource, the second provides practical guidance. No filler or repetition; every sentence earns its place.

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 an output schema present, return values are covered elsewhere. The annotations carry the safety profile. The description adequately covers purpose and high-level invocation strategy for a tool with 18 parameters, though it could mention the default pageSize or the most commonly used filters.

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 input schema describes most parameters, with 72% coverage. The description itself adds little parameter-specific meaning—'inclusive date range' merely restates schema descriptions, and 'use filters' is generic. It does not compensate for the few undocumented parameters like agricultureDepartments or includeSubProject.

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 a specific verb ('Read') and resource ('posted account transactions') and even names the API endpoint (GET /AccountTransactions). This distinguishes it from sibling tools that deal with customers or general ledger accounts.

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 offers clear usage guidance: use filters and small pages to keep accounting queries narrow. It does not explicitly name alternatives or exclusions, but no sibling tool overlaps with this functionality, so the absence of an explicit when-not-to-use is not a significant gap.

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

poweroffice_list_general_ledger_accountsList PowerOffice general ledger accountsA
Read-onlyIdempotent

Read a paginated list from GET /GeneralLedgerAccounts. Supports account ranges such as 1000-1999,2500,3000-.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoPowerOffice Fields expression. Omit for the MCP compact default
orderByNoPowerOffice OrderBy expression
pageSizeNo
accountNosNoAccount numbers or ranges in PowerOffice syntax
pageNumberNo
useDatabaseValidationNo
agricultureDepartmentsNoAgriculture departments, comma separated
lastChangedDateTimeOffsetGreaterThanNoOnly accounts changed after this ISO timestamp

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
paginationNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the operation safe, read-only, idempotent, and non-destructive. The description adds meaningful behavior beyond annotations by revealing pagination behavior, the exact endpoint, and support for account range syntax like '1000-1999,2500,3000-'.

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?

Two short sentences with no filler. The core action and resource are front-loaded, and the account range example is the only extra detail provided, all of which is useful.

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?

Between the description, the read-only annotations, the output schema, and schema parameter descriptions, the tool is mostly self-sufficient. The main gaps are lack of routing guidance to sibling tools and no explanation of ambiguous parameters like useDatabaseValidation, but this is not critical for a read-only list operation.

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 schema already provides descriptions for 63% of parameters. The description adds valuable semantic context for accountNos by showing concrete syntax examples, and clarifies pagination behavior which helps interpret pageNumber and pageSize. A few schema-uncovered parameters like useDatabaseValidation remain unexplained, but the description is not solely responsible since coverage is above 50%.

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 uses a specific verb ('Read'), a specific resource ('GET /GeneralLedgerAccounts'), and states it returns a paginated list. This clearly differentiates it from creating/updating general ledger accounts and from listing account transactions.

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 the tool is for reading a paginated list of general ledger accounts, but it does not explicitly state when to use this tool versus alternatives such as create/update_general_ledger_account or list_account_transactions. There is no 'when not to use' or sibling-specific routing guidance.

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

poweroffice_search_customersSearch PowerOffice customersA
Read-onlyIdempotent

Read a paginated list from GET /Customers. Filters that accept multiple values use PowerOffice comma-separated syntax. Returns a compact field set unless Fields is supplied.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoPowerOffice Fields expression. Omit for the MCP compact default
orderByNoPowerOffice OrderBy expression
pageSizeNo
pageNumberNo
customerNosNoCustomer numbers, comma separated
externalNosNoExternal numbers, comma separated
phoneNumbersNoPhone numbers, comma separated
emailAddressesNoEmail addresses, comma separated
contactGroupIdsNoContact group IDs, comma separated
organizationNumbersNoOrganization numbers, comma separated
useDatabaseValidationNo
externalImportReferenceNo
lastChangedDateTimeOffsetGreaterThanNoOnly customers changed after this ISO timestamp
customerCreatedDateTimeOffsetGreaterThanNoOnly customers created after this ISO timestamp

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
paginationNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnly/idempotent/openWorld/non-destructive signals; the description adds useful behavior beyond those: the endpoint is paginated, multi-value filters follow PowerOffice comma-separated syntax, and response fields are compact unless Fields is supplied. No contradiction 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?

Three short sentences front-load the core action and endpoint, then pack filter syntax and response default into the remaining space. Every sentence earns its place 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?

For a 14-parameter search tool, this is reasonably complete: it covers endpoint, pagination, filter syntax, and default field selection, while annotations and output schema cover safety and return value shape. It could add filter-combination semantics or examples for the ambiguous parameters, leaving minor gaps.

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?

Schema covers about 71% of parameters, and the description adds a meaningful default for fields (compact field set unless supplied) plus a general rule for multi-value filter parameters. A few parameters such as useDatabaseValidation remain unexplained, so it is not a 5.

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 opens with a specific verb and resource: 'Read a paginated list from GET /Customers.' It clearly identifies this as a list/search operation over customers, and the plural 'list' differentiates it from sibling get_customer without ambiguity.

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 establishes clear usage context: an agent should call this when it needs a paginated, filterable list of customers, and the compact-field behavior is stated. It does not explicitly name alternatives or exclusions, so it stops short of a 5.

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

poweroffice_update_customerUpdate a PowerOffice customerA
DestructiveIdempotent

Update one customer with JSON Patch at PATCH /Customers/{id}. Only mutable CustomerPatchDto paths are accepted. Set confirm=true only after the user has explicitly approved the exact changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
patchYes
confirmYesRequired explicit confirmation that these exact customer changes may be applied

Output Schema

ParametersJSON Schema
NameRequiredDescription
resourceYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructive and non-read-only behavior, but the description adds important behavioral context: only mutable CustomerPatchDto paths are accepted, and confirm=true requires explicit user approval of the exact changes. This goes beyond a simple 'update' statement and clarifies safety-critical behavior.

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?

Three short sentences, each earning its place: the first defines the operation and endpoint, the second constrains allowed patch paths, and the third states the confirmation requirement. No filler or redundant restatement of the schema.

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 covers the key operational concerns for a destructive update: allowed paths and explicit confirmation. It does not enumerate the actual mutable CustomerPatchDto paths, which would require an agent to know them from elsewhere, but the endpoint, annotations, and output schema cover most remaining context.

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?

With only 33% schema description coverage, the description compensates by explaining that patch is JSON Patch, restricting it to mutable CustomerPatchDto paths, and defining confirm as an explicit user-approval flag. The id parameter is inferable from the endpoint /Customers/{id}.

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, resource, and endpoint: 'Update one customer with JSON Patch at PATCH /Customers/{id}'. It clearly distinguishes this from sibling tools like poweroffice_create_customer, poweroffice_get_customer, and poweroffice_search_customers.

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 gives operational guidance, especially the explicit confirmation requirement for confirm=true, but it does not name alternatives or state when to use this tool versus create_or_get variants. Usage context is implied by the tool name and endpoint rather than explicitly spelled out.

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

poweroffice_update_general_ledger_accountUpdate a PowerOffice general ledger accountA
DestructiveIdempotent

Update one general ledger account with JSON Patch at PATCH /GeneralLedgerAccounts/{id}. Only mutable account paths are accepted. Set confirm=true only after the user has explicitly approved the exact changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
patchYes
confirmYesRequired explicit confirmation that these exact account changes may be applied

Output Schema

ParametersJSON Schema
NameRequiredDescription
resourceYes

TDQS

A4.4/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond annotations: only mutable account paths are accepted, and confirm=true must only be set after the user explicitly approves the exact changes. This helps the agent avoid destructive or unauthorized modifications. It does not contradict the 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?

Two concise sentences deliver the endpoint, operation type, mutation constraint, and the critical confirmation requirement. There is no filler or redundant repetition of the schema.

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 provides the key operational details: what is updated, how it is updated, what restrictions apply, and when confirm may be true. The output schema covers return values, so no additional response description is needed. It could be more complete by listing which account paths are mutable, but that is a minor gap.

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 schema documents only the confirm parameter, leaving id and patch with no description. The description compensates by clarifying that patch paths must be mutable and that confirm is an explicit user-approval flag. While id still lacks explanation, its purpose is evident from the endpoint.

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: updating a single general ledger account using JSON Patch, and specifies the exact endpoint. It distinguishes this tool from siblings like create_general_ledger_account and list_general_ledger_accounts by emphasizing 'Update one' and the PATCH method.

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 is clear this tool is for modifying an existing general ledger account by id. It provides no explicit when-not-to-use guidance or comparison with alternatives, but the 'Update one' phrasing and endpoint make the intended context unambiguous.

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. 10 tool updatesv0.1.0
    • First observedpoweroffice_configuration_status
    • First observedpoweroffice_connection_info
    • First observedpoweroffice_create_customer
    • First observedpoweroffice_create_general_ledger_account
    • First observedpoweroffice_get_customer
    • First observedpoweroffice_list_account_transactions
    • First observedpoweroffice_list_general_ledger_accounts
    • First observedpoweroffice_search_customers
    • First observedpoweroffice_update_customer
    • First observedpoweroffice_update_general_ledger_account

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct resource and action: connection info, configuration status, customer CRUD/search, general ledger account CRUD/list, and account transactions. Even the similar list/search/get operations are clearly separated by resource type and described filters.

Naming Consistency4/5

Tool names consistently use the poweroffice_ prefix and mostly follow a verb_noun pattern such as create_customer, update_customer, list_account_transactions. The two status/info tools break the pattern slightly, but the overall style is uniform and predictable.

Tool Count5/5

Ten tools is a well-scoped size for a PowerOffice MCP server covering customers, general ledger accounts, transactions, and connection diagnostics. Each tool serves a clear purpose without redundancy or bloat.

Completeness4/5

The server covers the main customer and general ledger account workflows including create, update, and read operations, plus transaction listing. Minor gaps exist such as no single-account fetch for general ledger accounts and no delete operations, but these are not critical for common integration workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables Codex to access Feishu knowledge bases and authorized shared cloud drives, allowing listing, searching, and reading wikis, documents, spreadsheets, bitable, and files, with scoped and approval-gated create and edit capabilities.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to access Saxo Bank portfolio data, account balances, positions, orders, transactions, and market data such as instruments, quotes, and charts. It is read-only by default, with trading tools available only when explicitly enabled.
    10
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read and write accounting data in PowerOffice Go, including bookkeeping, sales, purchases, payroll, time tracking, and read-only bank access, with support for multiple companies and strict isolation.
    MIT