Pohoda MCP服务器
MCP 会计软件服务器 徒步旅行 od风暴。 通过舒适沟通 mServer XML API.
将您的AI助理直接连接到会计。查询发票,浏览 目录,检查库存,创建新文档或打印 PDF格式。只需输入您需要的内容,MCP服务器将处理通信 放松。
要求
- PHP 8.1+
- extcurl、extdom、extsimplexml
- 使用活动的mServer的便利(方案版本2)
在舒适中设置 mServer
在使用 MCP 服务器之前,您需要在“方便”中打开并配置 mServer。
1. 打开 mServer 管理
在“舒适”中打开议程 会计单位在菜单中选择 数据库 > HOHODA mServer.
2. 配置管理
打开 mServer 配置列表对话框。 每个配置都包含名称、端口、启动状态、客户端和 PID。
3. 创建新实例
点击 新建 和 标签 基本 继续:
- 名称 mServeru
- 会计单位mServer将与之通信
- 港口 通讯(默认444)
在书签上 超文本传输安全协议 可以启用安全通信:
在书签上 监控 可以启用通信日志:
4. 启动
选择配置,然后单击 已下载 (或双击记录)。 mServer 将在设置的端口上开始监听。
或者,mServer可以通过开关从命令行控制 /HTTP 烟酰胺腺嘌呤二核苷酸 pohoda.exe最后一个参数是配置名称(括号, 如果有空白:
& "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服务)
详情见 Stormware 文档.
安装 MCP 服务器
git clone https://github.com/dg/pohoda-mcp.git
cd pohoda-mcp
composer installKonfigurace
服务器通过环境变量进行配置:
| 变量 | 描述 | 默认 |
|---|---|---|
POHODA_URL | URL mServeru | http://localhost:444 |
POHODA_ICO ICO会计单位 | ||
POHODA_USERNAME | mServer的用户名 | |
POHODA_PASSWORD | Heslo | |
POHODA_EXE_PATH K路 Pohoda.exe 自动启动 mServer (可选) | ||
POHODA_CONFIG_NAME | mServer 自动启动配置名称(可选) |
如果设置 POHODA_EXE_PATH 一 POHODA_CONFIG_NAME服务器在第一 tool call 验证 mServer 是否正在运行,如果没有,则自动通过 pohoda.exe /HTTP start. 当MCP退出服务器时,它会再次停止,但只有当它自己启动时(如果 mServer已经在运行,让它运行。仅适用于 Windows(mServer 是 Comfort 的一部分)。
在代理中使用(例如 Claude Code)
添加到 .mcp.json nebo做项目设置:
{
"mcpServers": {
"pohoda": {
"command": "php",
"args": ["/cesta/k/pohoda-mcp/server.php"],
"env": {
"POHODA_URL": "http://localhost:444",
"POHODA_ICO": "12345678",
"POHODA_USERNAME": "Admin",
"POHODA_PASSWORD": "",
"POHODA_EXE_PATH": "C:\\Program Files (x86)\\STORMWARE\\POHODA\\Pohoda.exe",
"POHODA_CONFIG_NAME": "mServer1"
}
}
}
}最后两个变量是可选的,用于自动启动 mServer 第一个工具调用(见上文)。
可用工具
状态_status
检查 mServer 是否正在运行和响应。基本呼叫只返回短文本 z GET /status (对应于一个简单的字符串,而不是XML)。带参数 companyDetail=true 此外,通过验证查询返回实体名称, 数据库名称和当前会计年度。
| 参数 | 列表 |
|---|---|
companyDetail | true/false 还返回活动会计单位的数据(default) false) |
pohoda_list_documents、pohoda-list_stock、pohoda list_contacts
按照记录类型划分的三种阅读工具。利基/数字议程 (centre, activity, store, bankAccount, cashRegister, numericalSeries) 不可通过专用工具, 使用 pohoda_raw_xml.
pohoda_list_文档
文件参数 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,客户端剪切)。
pohoda_list_stock
物资。过滤器 : id, code, name, EAN, storage (仓库的路径,例如。 "ZBOZI/Elektro"), store (简称基金) internet (真/假), lastChanges, limit.
pohoda_list_contacts
地址簿过滤器 : id, company, ico, lastChanges, limit.
pohoda_create_invoice
创建发出或接受的发票。支持 :
- 直接的合作伙伴地址或链接到目录(
partnerId) - 可变符号,到期日期,应纳税履行日期
- 预付款, 付款方式, 银行账户
- 中心,活动,任务
- 外汇汇率
- 与存储卡相关的项目(
stockCode)
pohoda_create_address
在目录(公司/联系人)中创建条目。
pohoda_create_stock
创建存储卡。除了基本数据(代码,名称,价格)外,还支持:
- EAN、PLU代表珍宝
- 销售和电子商店的症状
- 说明,名称补充,简称
- 最小和最大库存,重量
- 供应商,保修
pohoda_create_order
创建已接受或已发出的项目订单。
pohoda_print
打印或导出任何记录为PDF。知识 :
- 打印到打印机(默认或特定)
- 导出到服务器上的PDF文件(
pdfPath是强制性的PDF路径) - 直接在响应中返回 PDF 作为 Base64 (
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 atd。
打印报告 ID (reportId)根据安装和自定义而有所不同。 你可以舒适地找到它。 打印报表编辑器 (文件菜单 → 打印报告) 您可以在每个报表中看到 ID 列,或者在报表上单击鼠标右键 在新闻对话中→ 特性标准附带的报告在行中具有ID 数百到数千(通常为200-3000+)。
pohoda_raw_xml
发送任何XML。它涵盖了其他工具不够的情况。 XML直接插入 `` 信封必须包含自己的 命名空间deklarace。
参考资源(MCP Resources)
允许的数字显示为 MCP 资源,因此客户端可以使用 无需 tool call 即可:
| URI | 内容 |
|---|---|
pohoda://enums/agendas | 议程列表按照哪个工作表工具覆盖分割 |
pohoda://enums/vat-rates 允许的值 vatRate 项目(none, low, high) | |
pohoda://enums/payment-types | 价值观 paymentType faktur(draft, cash, card, compensation) |
pohoda://enums/print-agendas 捷克议程名称已接受 pohoda_print |
使用PHP代码(无MCP)
该库也可以直接作为mServer的PHP客户端使用,独立于MCP。 适用于自定义脚本,cronjoby或与现有应用程序集成。
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哪个 启动非阻塞休息,并在启动后授粉 PohodaClient::getStatus(), 直到 mServer 开始响应。只有Windows。
最简单的方法就是把它交出去。 PohodaClientu - 然后他自己开始懒惰 mServer 在第一个 HTTP 请求之前停止,并在销毁时再次停止 他自己开始;如果他已经跑了,让他跑:
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 ...如果你想手动控制生命周期,控制器可以直接做同样的事情:
$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,ne http://localhost:555 PHP解析器测试 localhost IPv6 (::1mServer无法监听 不必要地等待时间。
公共方法 MServerController:
start(PohodaClient $client, int $timeoutSeconds = 30)— 启动 舒适
s /HTTP start等待 HTTP 状态 API 响应。超时时弹出 RuntimeException.
stop()发送/HTTP stopfire-and-forget,不等待结束。
解决问题
| 症状 | 可能原因 |
|---|---|
Curl Error: Connection refused mServer无法运行在舒适或通过运行它 pohoda.exe /HTTP start | |
HTTP 401 | 错误 POHODA_USERNAME / POHODA_PASSWORD |
| 答案是带登录页面的 HTML | 方便的用户没有访问 mServer 的权限,或者其他实例正在打开日历 |
state="error" + note="Nepodařila se validace dokumentu podle schématu" XML 结构错误 — 通常是命名空间被替换或缺少必需元素;错误文本指向元素。 | |
listRecords 返回空列表 | mServer连接到文件所在地以外的单位/年份(请检查 pohoda_status s companyDetail=true) |
pdfPath 已创建,但无法打开 (0 B) | mServer 无权写入该位置 — 尝试默认 D:\Data\ucto\Tisk\ 或 Pohoda 运行的临时用户目录 |
Print 返回 OK,但 PDF 不会出现。 reportId 安装中不存在;在打印报告编辑器中验证ID。 |
项目结构
server.php vstupní bod MCP serveru (stdio transport)
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许可证
麻省理工学院
