Skip to main content
Glama
hlebtkachenko

POHODA MCP Server

pohoda_create_order

Create new sales or purchase orders in POHODA accounting software by specifying order type, date, partner details, and line items.

Instructions

Create a new order in POHODA. Requires orderType and date. Optional: numberOrder, text, partner details, note, and line items.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
orderTypeYesOrder type: issuedOrder or receivedOrder (required)
dateYesOrder date (DD.MM.YYYY or YYYY-MM-DD)
numberOrderNoOrder number
textNoOrder text/description
partnerNameNoPartner company name
partnerStreetNoPartner street
partnerCityNoPartner city
partnerZipNoPartner ZIP code
partnerIcoNoPartner IČO
partnerDicNoPartner DIČ
noteNoNote
itemsNoLine items: text, quantity, unitPrice, rateVAT (none|low|high), optional unit, code

Implementation Reference

  • Tool definition and implementation of 'pohoda_create_order'. It constructs an XML document and sends it to the POHODA client.
    server.tool(
      "pohoda_create_order",
      "Create a new order in POHODA. Requires orderType and date. Optional: numberOrder, text, partner details, note, and line items.",
      {
        orderType: orderTypeEnum.describe("Order type: issuedOrder or receivedOrder (required)"),
        date: z.string().describe("Order date (DD.MM.YYYY or YYYY-MM-DD)"),
        numberOrder: z.string().optional().describe("Order number"),
        text: z.string().optional().describe("Order text/description"),
        partnerName: z.string().optional().describe("Partner company name"),
        partnerStreet: z.string().optional().describe("Partner street"),
        partnerCity: z.string().optional().describe("Partner city"),
        partnerZip: z.string().optional().describe("Partner ZIP code"),
        partnerIco: z.string().optional().describe("Partner IČO"),
        partnerDic: z.string().optional().describe("Partner DIČ"),
        note: z.string().optional().describe("Note"),
        items: z
          .array(orderItemSchema)
          .optional()
          .describe("Line items: text, quantity, unitPrice, rateVAT (none|low|high), optional unit, code"),
      },
      async (params) => {
        try {
          const xml = buildImportDoc({ ico: client.ico }, (item) => {
            const ord = item.ele(NS.ord, "ord:order").att("version", "2.0");
            const header = ord.ele(NS.ord, "ord:orderHeader");
    
            header.ele(NS.ord, "ord:orderType").txt(params.orderType);
            header.ele(NS.ord, "ord:date").txt(toIsoDate(params.date));
            if (params.numberOrder) header.ele(NS.ord, "ord:numberOrder").txt(params.numberOrder);
            if (params.text) header.ele(NS.ord, "ord:text").txt(params.text);
    
            const hasPartner =
              params.partnerName ??
              params.partnerStreet ??
              params.partnerCity ??
              params.partnerZip ??
              params.partnerIco ??
              params.partnerDic;
            if (hasPartner) {
              const identity = header.ele(NS.ord, "ord:partnerIdentity");
              const typAddr = identity.ele(NS.typ, "typ:address");
              if (params.partnerName) typAddr.ele(NS.typ, "typ:name").txt(params.partnerName);
              if (params.partnerStreet) typAddr.ele(NS.typ, "typ:street").txt(params.partnerStreet);
              if (params.partnerCity) typAddr.ele(NS.typ, "typ:city").txt(params.partnerCity);
              if (params.partnerZip) typAddr.ele(NS.typ, "typ:zip").txt(params.partnerZip);
              if (params.partnerIco) typAddr.ele(NS.typ, "typ:ico").txt(params.partnerIco);
              if (params.partnerDic) typAddr.ele(NS.typ, "typ:dic").txt(params.partnerDic);
            }
    
            if (params.note) header.ele(NS.ord, "ord:note").txt(params.note);
    
            if (params.items && params.items.length > 0) {
              const detail = ord.ele(NS.ord, "ord:orderDetail");
              for (const it of params.items) {
                const ordItem = detail.ele(NS.ord, "ord:orderItem");
                ordItem.ele(NS.ord, "ord:text").txt(it.text);
                ordItem.ele(NS.ord, "ord:quantity").txt(String(it.quantity));
                ordItem.ele(NS.ord, "ord:rateVAT").txt(it.rateVAT);
                ordItem
                  .ele(NS.ord, "ord:homeCurrency")
                  .ele(NS.typ, "typ:unitPrice")
                  .txt(String(it.unitPrice));
                if (it.unit) ordItem.ele(NS.ord, "ord:unit").txt(it.unit);
                if (it.code) ordItem.ele(NS.ord, "ord:code").txt(it.code);
              }
            }
          });
          const response = await client.sendXml(xml);
          const result = extractImportResult(parseResponse(response));
          return result.success
            ? ok(
                `Order created successfully.${result.producedId != null ? ` ID: ${result.producedId}` : ""} ${result.message}`
              )
            : err(result.message);
        } catch (e) {
          return err((e as Error).message);
        }
      }
    );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hlebtkachenko/pohoda-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server