mcpField
P
Pohoda MCP

Pohoda MCP

本地服务
github.com/dg金融数据232 周前更新

关于 Pohoda MCP

Pohoda MCP 是连接 Pohoda 会计软件与 AI 客户端的 MCP 服务,通过 mServer XML API 读写会计数据。它覆盖单据、库存和联系人查询与创建,并支持打印或导出 PDF。

主要功能

  1. 01查询单据、库存与联系人
  2. 02创建发票、订单、库存卡和联系人
  3. 03打印记录或导出 PDF
  4. 04通过 raw_xml 发送 XML
  5. 05提供状态检查与枚举资源

适用场景

  1. 01检索发票和订单记录
  2. 02在 Pohoda 中创建发票或订单
  3. 03检查库存与联系人资料
  4. 04将会计记录打印或导出为 PDF

MCP 相关

向 MCP 客户端提供查询、创建、打印及 raw_xml 工具,并发布枚举资源。服务通过 Pohoda 的 mServer XML API 通信。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Pohoda MCP 服务

用于 Stormware 会计软件 Pohoda 的 MCP 服务。 通过 mServer XML API 与 Pohoda 通信。

将 AI 助手直接连接到会计系统。查询发票、浏览地址簿、检查库存、创建新单据,或让系统将发票打印为 PDF。只需说明您的需求,MCP 服务便会负责与 Pohoda 通信。

要求

  • PHP 8.1+
  • ext-curl、ext-dom、ext-simplexml
  • 已启用 mServer 的 Pohoda(架构版本 2)

在 Pohoda 中设置 mServer

使用 MCP 服务前,需要在 Pohoda 中启用并配置 mServer。

1. 打开 mServer 管理

在 Pohoda 程序中打开会计单位模块,在菜单中选择 数据库 > POHODA mServer。

打开 mServer 管理

2. 管理配置

此时会打开一个对话框,其中列出了 mServer 配置。 每项配置都会显示名称、端口、启动状态、主机和 PID。

mServer 管理

3. 创建新实例

点击新建,并在基本选项卡中设置:

  • mServer 的名称
  • mServer 将与之通信的会计单位
  • 用于通信的端口(默认值为 444)

实例设置

在 HTTPS 选项卡中,可以启用安全通信:

HTTPS 设置

在监控选项卡中,可以启用通信日志记录:

监控设置

4. 启动

选择配置并点击 启动(或双击条目)。 mServer 将开始在设置的端口上侦听。

也可以通过 pohoda.exe 上的 /HTTP 开关从命令行控制 mServer。最后一个参数为配置名称(如果包含空格, 请用引号括起来):

& "C:\Program Files (x86)\STORMWARE\POHODA\Pohoda.exe" /HTTP start "eShop-1"
& "C:\Program Files (x86)\STORMWARE\POHODA\Pohoda.exe" /HTTP stop "eShop-1"
& "C:\Program Files (x86)\STORMWARE\POHODA\Pohoda.exe" /HTTP restart "eShop-1"
& "C:\Program Files (x86)\STORMWARE\POHODA\Pohoda.exe" /HTTP list

其他命令:stop /f(强制终止)、list:xml(以 XML 格式列出配置)。 对于在系统启动时自动启动,Stormware 推荐使用 Windows 任务计划程序 (而非 Windows 服务)。

详情请参阅 Stormware 文档。

MCP 服务安装

git clone https://github.com/dg/pohoda-mcp.git
cd pohoda-mcp
composer install

配置

通过环境变量配置服务:

变量描述默认值
POHODA_URLmServer 的 URLhttp://localhost:444
POHODA_ICO会计实体的 ICO
POHODA_USERNAMEmServer 的用户名
POHODA_PASSWORD密码
POHODA_EXE_PATH用于自动启动 mServer 的 Pohoda.exe 路径(可选)
POHODA_CONFIG_NAME用于自动启动的 mServer 配置名称(可选)

如果设置了 POHODA_EXE_PATH 和 POHODA_CONFIG_NAME,服务会在首次 工具调用前检查 mServer 是否正在运行;如果没有运行,则会自行通过 pohoda.exe /HTTP start 启动。 MCP 服务关闭时也会停止 mServer,但仅当它是由 MCP 服务启动时才会停止(如果 mServer 已在运行,则会让它继续运行)。仅限 Windows(mServer 是 Pohoda 的组成部分)。

在 Agent 中使用(例如 Claude Code)

现成的配置位于文件 .mcp.json.example 中。复制该文件并补充 server.php 的绝对路径和访问凭据。最后两个变量是可选的,用于在首次工具调用时自动启动 mServer(见上文)。 配置文件的存放位置取决于所用工具:

工具位置
Claude Code项目根目录中的 .mcp.json
Claude Desktop将内容粘贴到 %APPDATA%\Claude\claude_desktop_config.json
Cursor项目中的 .cursor/mcp.json,或适用于所有项目的 ~/.cursor/mcp.json
Gemini CLI项目中的 .gemini/settings.json,或 ~/.gemini/settings.json
Windsurf~/.codeium/windsurf/mcp_config.json

VS Code(Copilot)使用 servers 键,并能在启动时提示输入密码,因此密码无需 保存在文件中。放入 .vscode/mcp.json:

{
	"inputs": [
		{"type": "promptString", "id": "pohoda-password", "description": "Heslo k mServeru", "password": true}
	],
	"servers": {
		"pohoda": {
			"type": "stdio",
			"command": "php",
			"args": ["/cesta/k/pohoda-mcp/server.php"],
			"env": {
				"POHODA_URL": "http://localhost:444",
				"POHODA_ICO": "12345678",
				"POHODA_USERNAME": "Admin",
				"POHODA_PASSWORD": "${input:pohoda-password}"
			}
		}
	}
}

OpenAI Codex CLI 使用 TOML 格式的配置,放入 ~/.codex/config.toml:

[mcp_servers.pohoda]
command = "php"
args = ["/cesta/k/pohoda-mcp/server.php"]
env = { POHODA_URL = "http://localhost:444", POHODA_ICO = "12345678", POHODA_USERNAME = "Admin", POHODA_PASSWORD = "" }

切勿提交包含密码的文件。 如果将配置保存在项目中,请将其添加到 .gitignore。

可用工具

status

检查 mServer 是否正在运行并响应。基本调用仅返回 GET /status 的简短文本(Pohoda 返回的是普通字符串,而非 XML)。使用参数 companyDetail=true 时,还会通过经过身份验证的请求返回会计实体名称、 数据库名称和当前会计年度。

参数描述
companyDetailtrue/false — 是否同时返回当前会计实体的信息(默认 false)
list_documents, list_stock, list_contacts

三个读取工具,按记录类型划分。小众/代码表类业务模块 (centre、activity、store、bankAccount、cashRegister、numericalSeries) 无法通过专用工具访问,请使用 raw_xml。

list_documents

单据。参数 agenda 必须为以下之一:

业务类型描述业务类型描述
invoice发票*prijemka入库单
order订单vydejka出库单
voucher现金单据prodejka销售单
bank银行prevodka调拨单
contract项目vyroba生产
intDoc内部单据accountancy会计日记账
offer报价
enquiry询价

* invoice 业务类型需要 invoiceType 参数:issuedInvoice 或 receivedInvoice。

筛选条件:id、dateFrom、dateTill、company、ico、number (精确匹配整个值,不支持子字符串)、lastChanges (自 YYYY-MM-DDThh:mm:ss 起变更的记录)、limit(默认 100,客户端截断)。

list_stock

库存。筛选条件:id、code、name、ean、storage (仓库分类路径,例如 "ZBOZI/Elektro")、store(仓库缩写)、 internet(true/false)、lastChanges、limit。

list_contacts

通讯录。筛选条件:id、company、ico、lastChanges、limit。

create_invoice

创建已开具或已收到的发票。支持:

  • 直接提供合作方地址,或关联通讯录(partnerId)
  • 可变符号、到期日、应税供应日期
  • 预设科目、付款方式、银行账户
  • 成本中心、活动、项目
  • 外币及汇率
  • 关联库存卡片的项目(stockCode)
create_address

在通讯录中创建记录(公司/联系人)。

create_stock

创建库存卡片。除基本信息(代码、名称、价格)外,还支持:

  • EAN、收银机使用的 PLU
  • 销售和网店标记
  • 描述、名称补充、简称
  • 最低和最高库存、重量
  • 供应商、保修
create_order

创建含项目的已收到或已发出订单。

print

打印任意记录或将其导出为 PDF。支持:

  • 打印到打印机(默认打印机或指定打印机)
  • 将 PDF 导出到服务器上的文件(PDF 路径必须指定 pdfPath)
  • 在响应中直接以 Base64 返回 PDF(pdfBase64=true,需要 pdfPath)

业务类型需用捷克语指定:vydane_faktury、prijate_faktury、zasoby、adresar、 pokladna、banka、interni_doklady、zakazky、vydejky、prijemky、prodejky、 vydane_objednavky、prijate_objednavky、vydane_nabidky、prijate_nabidky 等。

打印报表 ID(reportId)因安装和自定义设置而异。 在 Pohoda 的 打印报表编辑器中可以查看(菜单“文件” → “打印报表”), 每个报表旁都有 ID 列;也可以在打印对话框中右键单击报表 → 属性。标准附带的报表 ID 通常为数百到数千(一般为 200–3000+)。

参考资源(MCP resources)

允许值的枚举以 MCP resources 形式提供,客户端无需调用工具即可获取:

URI内容
pohoda://enums/agendas按各列表工具覆盖范围划分的业务类型列表
pohoda://enums/vat-rates项目中 vatRate 的允许值(none、low、high)
pohoda://enums/payment-types发票 paymentType 的值(draft、cash、card、compensation)
pohoda://enums/print-agendasprint 接受的捷克语业务类型名称

在 PHP 代码中使用(不使用 MCP)

此库也可以直接作为 PHP 客户端用于 mServer,独立于 MCP。 适用于自定义脚本、cron 任务,或集成到现有应用程序中。

use DG\Pohoda\PohodaClient;

$client = new PohodaClient(
    url: 'http://localhost:444',
    ico: '12345678',
    username: 'Admin',
    password: '',
);

// Najdi fakturu podle čísla dokladu
$list = $client->listRecords('invoice', ['number' => '26010192'], 'issuedInvoice');
$faId = (int) $list->items[0]->data['invoice'][0]['invoiceHeader']['id'];

// Vytiskni ji do PDF
$client->printRecord([
    'agenda' => 'vydane_faktury',
    'recordId' => $faId,
    'reportId' => 3000,
    'pdfPath' => 'C:\\tmp\\faktura.pdf',
]);

PohodaClient 的公共方法:getStatus()、listRecords()、createInvoice()、 createAddress()、createStock()、createOrder()、printRecord()、sendRawXml()。

启动和停止 mServer

如果脚本不能假设 mServer 已经启动,MServerController 类会很有用。它是对 pohoda.exe /HTTP start|stop 的轻量封装,以非阻塞方式启动 Pohoda,并在启动后轮询 PohodaClient::getStatus(),直到 mServer 开始响应。仅适用于 Windows。

最简单的方式是将它传给 PohodaClient,这样客户端会在第一次 HTTP 请求前自动延迟启动 mServer,并在析构时将其停止(仅当 mServer 是由客户端启动时;如果它之前已经在运行,则保持运行):

use DG\Pohoda\MServerController;
use DG\Pohoda\PohodaClient;

$client = new PohodaClient(url: 'http://127.0.0.1:555', ico: '12345678', username: 'Admin', password: '');
$client->setController(new MServerController(
    exePath: 'C:\Program Files (x86)\STORMWARE\POHODA\Pohoda.exe',
    configName: 'mServer1',
));

// ... práce s $client — autostart se postará o sebe ...

如果你想手动管理生命周期,也可以直接调用 controller 的相同功能:

$ctrl = new MServerController(exePath: '...', configName: 'mServer1');

$wasRunning = false;
try {
    $client->getStatus();
    $wasRunning = true;
} catch (\RuntimeException) {
    $ctrl->start($client);  // vrátí se až když mServer odpovídá (nebo vyhodí po timeoutu)
}

// ... práce s $client ...

if (!$wasRunning) {
    $ctrl->stop();
}

调用 HTTP 端点时,请使用 http://127.0.0.1:555,而不是 http://localhost:555 ——PHP 解析器会优先为 localhost 尝试 IPv6(::1),而 mServer 不会监听该地址, 因此会白白等待超时。

MServerController 的公共方法:

  • start(PohodaClient $client, int $timeoutSeconds = 30) — 使用 /HTTP start 启动 Pohoda, 并等待 HTTP 状态 API 响应。超时会抛出 RuntimeException。
  • stop() — 发送 /HTTP stop 后立即返回,不等待服务停止。

故障排查

症状可能原因
Curl Error: Connection refusedmServer 未运行;请在 Pohoda 中启动,或通过 pohoda.exe /HTTP start 启动
HTTP 401POHODA_USERNAME / POHODA_PASSWORD 错误
响应是包含登录页面的 HTMLPohoda 中的用户没有 mServer 权限,或该账套已由另一个实例打开
state="error" + note="Nepodařila se validace dokumentu podle schématu"XML 结构错误——通常是命名空间混淆或缺少必需元素;错误文本会指出对应元素
listRecords 返回空列表mServer 连接的是与单据所在账套/年份不同的账套/年份(请检查 status,并设置 companyDetail=true)
已创建 pdfPath,但无法打开(0 B)mServer 没有在该位置写入的权限——请尝试默认目录 D:\Data\ucto\Tisk\,或 Pohoda 运行用户的临时目录
Print 返回 OK,但未生成 PDF安装中不存在该 reportId;请在报表打印设置编辑器中确认 ID

项目结构

server.php                 vstupní bod MCP serveru (stdio transport)
.mcp.json.example          vzorová konfigurace MCP klienta
src/
	McpTools.php             tenký MCP adaptér (#[McpTool] atributy)
	PohodaClient.php         HTTP klient a doménové metody pro mServer API
	XmlBuilder.php           stavba XML požadavků přes XMLWriter
	Response.php             parsovaná odpověď z mServeru
	ResponseItem.php         jeden záznam z odpovědi
	MServerController.php    spouštění a zastavování mServeru přes pohoda.exe

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。