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

  • 所调用 endpoint 所需的访问角色

安装

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 已通过 STDIO 运行构建后的 dist/index.js。如果文件存在,它会读取 .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 时对读取请求最多重试两次,延迟至少一秒。写入请求不会自动重试,以避免产生重复数据。总请求频率受 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