Skip to main content
Glama
benethos-hub

Unofficial Lexware Office MCP Server

by benethos-hub

非公式 Lexware Office MCP サーバー

CI PyPI Python Coverage License

免責事項

  • このプロジェクトは Lexware または Haufe-Lexware GmbH & Co. KG とは提携、承認、またはスポンサー関係にありません。「Lexware」および「Lexware Office」は各所有者の商標です。

  • これは、ご自身で生成して失効させることができる API キーを使用した、文書化された公開 API を使用します。その API の使用は Lexware 自身の規約に準拠し、お客様はこのプロジェクトとは独立してそれを受け入れます。API はいつでも変更される可能性があり、リクエストがレート制限されたりブロックされたりする場合があります。

  • これは実際の会計記録に到達します。書き込みアクセスはデフォルトでオフになっています。有効にすると、API を通じて作成されたものはすべて実際の法的に重要な記録となり、確定した文書は API を通じて撤回できません。

  • データは不完全または古い可能性があります。ここにあるものは税務、会計、または法律上のアドバイスではありません。 申告、監査、または簿記の義務のためにこれに依存しないでください。

  • 保証なしで「現状のまま」提供されます。自己責任での個人および業務用を目的としています。LICENSE を参照してください。

  • 商用利用の場合は、Lexware の API 規約と、お客様自身の保存および文書化義務を確認してください。

MCP サーバー。MCP クライアント(Claude Desktop など)を、公式の 公開 REST API を通じて Lexware Office アカウントに接続します。請求書、連絡先、記事、伝票について平易な言葉で質問し、クライアントにそれらを取得させることができます。

ステータス: 0.2.2。 サーバーは連絡先、伝票、文書を処理します。検索、読み取り、作成、変更、未払いの確認、PDF のダウンロード、領収書のアップロードができます。get_profile はどのアカウントが接続されているかを答えます。下の表のすべてのツールが構築され、それぞれが実際のアカウントに対して実行されました。これは、起動するクライアントに stdio で話し、他の何かが到達する必要がある場合はベアラートークンの背後でストリーミング HTTP を話します。公開されたコンテナイメージとして、それらの 2 つのための Compose ファイル付きです。完全な技術仕様とロードマップについては SPECS.md を参照してください。

これが存在する理由

Lexware Office は中小企業の日々の会計を保持しています。それに関するほとんどの質問は読み取りの質問です — まだ支払われていないものは何か、この顧客は何を注文したか、どの領収書がその経費に属するか — そしてこれらはまさに、アシスタントがデータを見ることができればうまく答える質問です。このサーバーは、何もエクスポートせずに、アカウント所有者が生成して失効させることができる API キーを使用してそれを可能にします。

Related MCP server: lexware-mcp-server

安全第一

サーバーは実際の会計システムを指しているため、デフォルトは慎重です。

理由がない限り、読み取り専用で実行してください。 このサーバーは実際の会計記録を変更できます — 連絡先の作成、伝票の記録、請求書の発行、領収書の添付 — そして、そのようなツールをいつ呼び出すかを決定するのはあなたではなくアシスタントです。--tools read-only は、帳簿に関する質問に答えるために必要なすべてを提供します。これはほとんどの人が望むことです:検索、読み取り、ダウンロード。そのセットには書き込みはありません。

書き込みツールをオンにするのは、そのための仕事があるときで、それが何を残すかを知っているときです。この API は簿記伝票をまったく削除できないため、間違ったものはここで撤回するのではなく Web アプリで修正され、確定した請求書は番号が使用された実際の文書です。必要なツールがわからない場合は、読み取り専用が正直な出発点です — 権限ページで後でワンクリックで追加でき、Claude Desktop のように notifications/tools/list_changed を尊重するクライアントは、再起動せずにそれを取得します。

  • あなたが言うまで何も有効になりません。 新しいインストールにはポリシーファイルがなく、ポリシーファイルのないサーバーはツールを一切提供しません。このサーバーが何をしてもよいかは、誰かが下した決定であり、デフォルトで起こることではありません。

  • ツールごとに 1 つのフラグ--tools で作成する JSON ファイル、setup でチェックするか、手動で編集します。レベルではなく、グループでもありません:create_contact をオンにして upload_file をオフにすることは普通のことであり、ファイルが表現できない組み合わせはありません。

  • ツールのコストは、決定中に表示されます。 有効なすべてのツールがすべてのリクエストでアシスタントに送信され、権限ページには各行にその数が表示されます。

  • ファイルは 2 回チェックされます。ツールリストが構築されるときと、呼び出しが到着したときです。クライアントの古いツールリストがそれをすり抜けることはできません。

  • API キーは決してログに記録されず、ツールの結果で返されることもなく、エラーメッセージからも編集されます。これは .env にのみ属し、他のどこにもありません — 別のプログラムが所有して書き換えるクライアントの設定ファイルには入れないでください。また、助けを求めるときに人々がスクリーンショットを撮る場所でもあります。あなたのマシンからのパスがアシスタントに到達することもありません。

ツール

以下のすべてのツールが構築され、実際のアカウントに対して実行されました。ポリシーファイルが名前を挙げるまで、どれも有効になりません。

読み取りツール:

ツール

機能

get_profile

会社プロフィールと接続チェック

search_contacts

名前、メール、番号、または役割で顧客とベンダーを検索

get_contact

住所、役割、バージョンを含む 1 つの連絡先

search_articles

番号、バーコード、または種類でフィルタリングされた記事を一覧表示。API はタイトルによる検索を提供しません

get_article

価格ブロックとバージョンを含む 1 つの記事

search_vouchers

中心的なクエリ — タイプ、ステータス、連絡先、日付範囲、および未処理のものによって伝票リストをフィルタリング

get_sales_document

請求書、見積書、クレジットノート、注文確認書、納品書、督促状、または前払い請求書を完全に読み取る

get_voucher

ID または文書番号で簿記伝票を読み取る

get_payments

伝票の支払いステータスと未払い額

get_recurring_templates

スケジュールで請求書を発行するテンプレート、1 つまたは 1 ページ

get_master_data

国、支払い条件、転記カテゴリ、印刷レイアウト。検索で絞り込むことができます

download_document

販売文書のレンダリングされた PDF または XML を保存

download_file

アップロードされた領収書などの保存されたファイルを保存

read_download

リソースリンクをたどれないクライアントのために、ダウンロードしたファイルを回答に入れる

get_deeplink

API 呼び出しなしで、Web アプリの販売文書、連絡先、または伝票へのパーマリンクを構築

書き込みツール。これらは実際の会計記録を変更するため、一度に 1 つずつ、変更しても構わないアカウントに対して有効にしてください:

ツール

機能

create_contact

顧客またはベンダーを作成

update_contact

名前を付けなかったものには触れずに、1 つを変更

create_article

カタログに記事を追加

update_article

名前を付けなかったものには触れずに、1 つを変更

create_voucher

簿記伝票を記録

update_voucher

すでに記録されているものを変更

create_sales_document

請求書、見積書、クレジットノート、注文確認書、納品書、または督促状を作成 — 発行を求めない限り下書き。発行は、明示的な指示がある場合にのみアシスタントが行うことができます

upload_file

領収書をアップロード。これにより伝票も作成されます

attach_file_to_voucher

既存の伝票にファイルを添付

update_contactupdate_voucher は、1 回ではなく 2 回の API 呼び出しを必要とします。API はレコードをパッチするのではなく置き換えるため、現在のものを最初に読み取り、変更をその上に重ねます。それがなければ、メールアドレスだけを変更すると、住所、メモ、その他すべてが空になります。両方とも、最後に読み取った version も必要です。間にレコードが変更された場合、更新は拒否され、何も書き込まれません。

1 つのツールが削除し、それは唯一のものです:

ツール

機能

delete_article

記事を削除します。API はそれを元に戻すことはできません。confirm: true が必要で、それなしでは何も送信しません

これまでのところ、--tools irreversible ステップの唯一のメンバーであるため、そのステップがそれをオンにする唯一の方法です。記事は、この API が削除できる唯一のものでもあります。それがポイントの残りの半分です。

--tools write は元に戻せるという意味ではありません。そのプリセットが有効にするツールのうち、レコードを削除するものはありませんが、そのうち2つのツールは後から削除できないレコードを作成します。

APIを通して会計伝票を削除することはできません。 そのためのエンドポイントは存在しないため、誤った create_voucher はLexware Office Webアプリで修正する必要があり、作成された時点で計上されます。APIは入力時にステータスを受け付けません。upload_file も同様です。領収書をアップロードすると、それに付随する伝票も作成されるため、名前はファイルだけに言及しているにもかかわらず、レコードが残ります。

ダウンロードはサーバーが実行されているマシンのダウンロードディレクトリに書き込まれ、2つの方法で報告されます。パス(クライアントとサーバーが同じマシンを共有している場合に必要なもの)とリソースURI(サーバーがどこにあってもクライアントがバイトを取得するために読み取れるもの)です。ファイル自体はツール結果内を移動しません。base64はコンテキスト内でファイルサイズの約1.37倍のコストがかかり、どのモデルもPDFを読めないからです。既存のファイルが置き換えられることはありません。2回目のダウンロードは、名前のカウンタ付きで最初のファイルの隣に保存されます。

リソースリストはサーバー起動時にダウンロードディレクトリから埋め込まれるため、URIは再起動後も読み取り可能です。サーバーができないのは、新しいダウンロードを通知することです。MCP SDKにはリスト変更通知を送信する方法がないため、起動時に一度リストを取得したクライアントは、セッション中に後から取得されたものを見ることはできません。

これと、Claude Desktopがリソースリンクをまったく追わないことの間で、read_download は常に機能するルートです。同じURIを受け取り、コンテンツを回答に入れます。到着するものはファイルによって異なります。

ファイル

到着形式

XML

テキスト。XRechnungを実際に読むことができる

PDF

ページの画像。デフォルトでは最初の10ページ

画像

画像

その他

クライアントが処理するための埋め込みバイナリ

PDFはそのまま渡すのではなくレンダリングされます。Claude DesktopがAPIを呼び出すときに埋め込みバイナリを画像ブロックに変換し、application/pdf はそこで許可された画像タイプではないため、リクエスト全体が拒否されるからです。レンダリングにはAPI呼び出しもかかりません。ファイルはすでにサーバー上にあるからです。

Webアプリへのリンクは別のツールです。get_deeplink はIDをブラウザ用のURLに変換し、API呼び出しは不要で、クライアントがファイルもリソースリンクも表示できない場合でも機能するルートです。誰かが自分で開くのです。ダウンロードにはリンクが含まれません。バイトがどこにあるかに答えるもので、これは別の質問であり、2つはかつて、壊れたリンクが機能するダウンロードに同行するほど長く結合されていました。

upload_file はPDF、JPEG、PNG、XMLを受け付け、ファイルあたり最大5 MiBで、これはAPIが受け付けるものです。XMLファイルはXRechnungとして扱われ、XRechnungでない場合は拒否されます。

要件

  • uv — これには独自のPythonと、以下のすべての例で使用する uvx コマンドが含まれます

  • Python 3.11以降(独自のものを用意する場合)。インストールすると、MCP SDK、httpx、platformdirs、pypdfium2(PDFページのレンダリング用)が取り込まれます

  • パブリックAPIアドオンが有効なLexware Officeアカウント

  • https://app.lexware.de/addons/public-api からのAPIキー

APIキーの取得

  1. アカウント所有者としてLexware Officeにサインインします。

  2. https://app.lexware.de/addons/public-api でパブリックAPIアドオンを開きます。

  3. キーを作成し、一度だけコピーします。表示されるのは一度だけです。

  4. バージョン管理に入るファイルには入れないでください。config/.env(gitignoreされています)に入れるか、環境変数として渡します。config/.env のキーは、サーバーがどのディレクトリから起動されても見つかるため、Claude Desktopなどのクライアントは設定ファイルに独自のキーを持つ必要はありません。

キーはいつでも同じページで失効させることができ、何かおかしいと思った場合にアクセスを遮断する最速の方法です。

インストール

サーバーを実行する最も簡単な方法 — クローンも、手動の仮想環境も、git も不要です。uvxPyPIbenethos-lexware-office-mcp として公開)からオンデマンドで取得して実行します。代わりにコンテナで実行する場合は、コンテナ内でを参照してください。

1. uvをインストールします(まだの場合)— uvインストールページがすべてのプラットフォームをカバーしています。uvx が含まれており、ここで必要なのはそれだけです。

2. サーバーを設定します。 これをインストールする必要はありません。uvx がパッケージを取得して実行します。

uvx benethos-lexware-office-mcp setup

これにより、ブラウザでの設定で説明されているインターフェースが開きます。キー、設定、ツールごとのチェックボックスがあります。そこでできることはすべて手動でもできます。uvx benethos-lexware-office-mcp --settings-sample > config/.env で設定ファイルを開始し、キーを入れ、以下で説明する --tools を使用します。

動作するか確認します。

uvx benethos-lexware-office-mcp --help

3. Claude Desktopでそれを指定します claude_desktop_config.json 内:

{
  "mcpServers": {
    "benethos-lexware-office-mcp": {
      "command": "uvx",
      "args": ["benethos-lexware-office-mcp"]
    }
  }
}

そこにあなたのマシンからのパスは表示されません。それがポイントです。uvx は名前でパッケージを検索します。そのエントリについて知っておくべきことが2つあります。

  • 安定性のためにバージョンを固定します: "args": ["benethos-lexware-office-mcp==0.2.2"]。固定しない場合、uvx は解決できる最新リリースを取得し、クライアントの再起動だけで実行内容が変わります。

  • uvx はクライアントが使用する PATH 上にある必要があります。これはターミナルのものとは限りません。一部のGUIクライアントは縮小された環境を渡します。サーバーが起動しない場合は、commanduvx の絶対パスを入れ、クライアントをリロードするのではなく完全に再起動してください。

独自のコマンドが欲しいですか? uv tool install benethos-lexware-office-mcp で、uvx を前に付けずに benethos-lexware-office-mcp を取得できます。これはコマンドラインから頻繁に権限を変更する場合に価値があります。それ以外には何も得られません。同じバージョンをどちらの方法でも固定でき、ウォームスタートの差は数十ミリ秒です。1つ知っておくべきこと — uvは独自のツールディレクトリにインストールしますが、これは新規インストールの PATH にはありません。完了時にそのように表示されます。uv tool update-shell を実行し、新しいターミナルを開いてください。

代わりにソースから、開発や未リリースのものを実行する場合:

git clone https://github.com/benethos-hub/lexware-office-mcp
cd lexware-office-mcp
uv sync
uv run benethos-lexware-office-mcp setup

クライアントはそのチェックアウトの仮想環境のインタープリタを必要とし、command はWindowsでは .venv/Scripts/python.exe、それ以外では .venv/bin/python を指し、args["-m", "benethos_lexware_office_mcp"] です。

意図的にキーはありません。 サーバーは .env でそれを見つけます。クライアントの設定ファイルは資格情報を置く場所としては不適切です。それはあなたのものではありません。別のプログラムが所有し、どこに置くか、いつ書き換えるかを決定します。MCPセットアップのヘルプを求めるときに人々がスクリーンショットを撮るファイルであり、クライアント自身の設定ビューで読み取り可能であり、クライアントの他の設定と一緒に次のマシンに移動します。.env は少なくとも、このプロジェクトが文書化し、あなたに代わって同期するものはなく、設定インターフェースがキーをあなたに表示せずに書き込むファイルです。

その .env はすでに注意すべき部分です。稼働中の会計システムの資格情報が含まれているため、バージョン管理、共有フォルダ、他の人が読めるバックアップから遠ざけてください。サーバーの使用を停止したら、それを削除し、拡張機能、パブリックAPIでキーを失効させてください。失効だけが実際にアクセスを終了させるステップです。

4. Claude Desktopを完全に再起動します — ウィンドウを閉じるのではなく、トレイから終了します。これは、起動時に一度だけ読み取られる、編集した設定ファイルのためであり、.env の変更された設定にも必要です。サーバーも起動時にそれらを読み取ります。権限には不要です。後で変更すると、実行中のクライアントに通知されます。個々のツールをオフにするを参照してください。

ブラウザでの設定

uvx benethos-lexware-office-mcp setup

127.0.0.1 上の3つのページで、Ctrl+Cで閉じます。コマンドラインと同じファイルを書き込むため、どちらかまたは両方を使用できます。画面はドイツ語です。Lexware Officeがドイツの企業のみに販売されているためで、各ページはそのラベルを括弧で示して名前が付けられています。

概要 (Übersicht) — 実際に有効な .envtools.json、各設定が解決される内容とその値の出所、各ファイルがまだ存在するかどうか、有効なツールの数とそのコスト。接続テストはボタン上で、ページ読み込み時には実行されません。

資格情報 (Zugangsdaten) — APIキー。保存前にAPIに対してチェックされます(特に指定しない限り)。秘密ではない設定も含まれます。キーはあなたに再表示されることはなく、ログにも記録されず、エクスポートもされません。環境変数が設定している場合、ページはそれを示します。それはあなたが保存するものを上書きするからです。

権限 (Rechte) — ツールごとのチェックボックスがグループ化され、プリセットがボタンとしてあります。ポリシーファイルがまだない新規インストールでは、読み取りツールが開始点として事前にチェックされています。フォーム内の提案であり、権限ではありません。保存を押すまでファイルはまだなく、したがってツールもありません。ページはそのように示します。各行には、そのツールがアシスタントのコンテキストで消費するコストが表示され、合計はチェックに従います。有効なすべてのツールは毎回のリクエストでモデルに送信されるため、1つをオンにすることは権限の決定であると同時に予算の決定でもあります。書き込みツールはマークされ、APIが取り消せない結果を持つものは別にマークされます。連絡先の場合は nur App(Lexware Officeが儀式なしで削除)、帳簿に入るレコードの場合は nur App · Buchhaltung です。どちらも固定されているわけではありません。作成時に何も festgeschrieben されるわけではなく、ページの凡例は後でレコードを拘束する4つのことを示しています。

プロファイルもここにあります。現在の選択を名前で保存し、後で読み込みます。読み込みはボックスのみを埋めます。保存を押すまで tools.json には何も到達しません。既存の名前は、静かに置き換えるのではなく拒否されます(大文字小文字とスペースは2番目のプロファイルを作成しません)。置き換えはリストの横にある独自のボタンです。ポリシーファイルの隣の tool_profiles.json に保存されます。

ポリシーファイル自体は、同じページからダウンロードして読み戻すことができます。ファイルはそのままなので、このインターフェースの有無にかかわらず別のインストールで機能し、--tools で書かれた tools.json もここで読み取れます。読み取りはボックスのみをチェックし、保存は依然として別の押下です。ファイルが言及していないツールはオフのままで、ページはその数を示します。これはコマンドラインでの --tools sync と同じです。

知っておくべきことが2つあります。127.0.0.1 にのみバインドされ、他には何もありません — ページにはパスワードがなく、これは他のマシンから到達できない場合にのみ正当化されるため、変更するオプションはありません。また、これは別のコマンドです。MCPサーバーはHTTPを提供せず、Claude Desktopなどのクライアントはこれをではなく、そのサーバーを起動します。

--port N で移動し、--no-browser はアドレスのみを出力し、--env-file--tools-file は編集するファイルを指定します。他の場所とは異なり、これらのファイルはまだ存在する必要はありません。

クライアントが --tools-file でサーバーを起動する場合は、setup にも同じ引数を渡してください — そうしないと、別のファイルを編集して成功を報告します。両方のプロセスは起動時にファイルを修正し、その後は決して変更せず、どちらも相手がどのように起動されたかを見ることはできません。概要には、クライアントがインターフェースが保持しているファイルと一致させるための "args" 行が表示されます。これはより簡単な方向です。

個々のツールをオフにする

1つのJSONファイルがこのサーバーが提供するものを決定し、他には何も決定しません。上記の setup でボックスをチェックするか、ファイルを次のように開始します。

uvx benethos-lexware-office-mcp --tools read-only

すべてのツールを tools.json に書き込み、有効なものはオン、残りはオフとして読み込み、何をしたかを出力します。3つのプリセットがあり、それぞれが前のものを含みます:

有効になるもの

--tools read-only

クエリのみ

--tools write

および作成と更新

--tools irreversible

および記事の削除

--tools sync

フラグは変更せず、ファイルが知らないツールだけを追加

--tools show は報告のみ行います。--tools-file PATH は書き込み先を指定し、すべてのプリセットと組み合わせて使えます — --tools write --tools-file ./tools.json はそこにファイルを作成します。

プリセットはファイル全体を上書きするため、手動での編集は失われます。ファイルを更新するためではなく、作成するために使ってください。アップグレードで新しいツールが追加されたら、--tools sync を実行します: 新しいツールをオフとして書き込み、設定済みのフラグはそのままにし、何もオンにしません。この最後の点が、スクリプトから実行しても安全な唯一の方法である理由です。

3番目のステップは、それ自体が独立した判断であるため、単独になっています: 削除されたものは戻ってきません。そのため、最大のオプションを選ぶのではなく、名前を指定して選択する必要があります。そのような効果を持つツールは delete_article の1つだけであり、これは一時的な状態ではありません — このAPIが削除できるのは記事だけであり、後から何かを予約、確定、無効化する方法もありません。

--tools-file がない場合、ファイルは .env とまったく同じように検索され、優先度の低い順に:

  1. ユーザーごとの設定ディレクトリ

  2. ソースから実行している場合、チェックアウトの config/

  3. config/、次に作業ディレクトリのルート

最後に見つかったものが優先され、誰も作成していないファイルは最初の場所に解決されます。その後、それを編集します:

{
 "create_contact": false,
 "search_contacts": true,
 "upload_file": false
}

false に設定されたツールは一覧に表示されず、呼び出すこともできません。ファイルが言及していないツールもオフです — 沈黙は拒否を意味するため、アップグレードで追加されたツールは自動的に表示されるのではなく、あなたを待ちます。ファイルがまったくない場合はツールもまったくないことを意味し、それが --tools がサーバー設定の一部である理由です。

ファイルはツールリストの構築時と、各呼び出しのたびに読み込まれるため、編集は即座に両方向に反映されます — 再起動は不要です。サーバーは有効なツールのセットが変更されたときにクライアントに通知するため、クライアントは自動的にリストを再取得します: Claude Desktop は実行中に変更を検出します。どちらにせよ、オフにされたツールはクライアントがまだ表示しているリストに関係なく呼び出すことができないため、何も依存しません。クライアントが変更に気づかない場合は、再起動してください — Claude Desktop はトレイから終了します。

各ツールはまた、自分が何であるかを宣言します — 読み取りか書き込みか、どのグループに属するか、書き込んだものを再度削除できるかどうか。この分類は --tools read-only が選択する基準であり、ブラウザインターフェースがグループ化してマークする基準です。呼び出しを決定することはありません: 決定するのはファイルだけです。

設定

値の出所と、どれが優先されるか

適用される .env は1つだけです。 検索される場所は以下のとおりで、優先度の低い順に、存在する最も高いものがファイルになります — 他は読み込まれません:

  1. ユーザーごとの設定ディレクトリ内の .env

  2. サーバーが実行されているチェックアウトの config/.env(チェックアウトから実行している場合)

  3. 作業ディレクトリの config/.env、次に .env

--env-file は代わりにファイルを指定し、その場合は検索はまったく行われません。これは --tools-file がポリシーファイルに対して従うのと同じルールなので、両方のフラグは同じことを意味します: このファイルだけ、他は何もありません。

そのファイルの外には2つのものがあり、1つは下、もう1つは上にあります:

  • ファイルが言及していない設定のための組み込みデフォルト

  • ファイルの内容よりも優先される実際の環境変数

最後のものが人々を驚かせるものです。シェルでエクスポートされた設定、クライアントの env ブロックに入れられた設定、または Compose ファイルに固定された設定は、.env を編集しても変更できません — 手動でも、setup を通しても。値は書き込まれ、ファイルは正しく、何も起こりません。

設定インターフェースは、あなたが気づくのを待つのではなく、それを明示します: 各設定にはソースを示すバッジが付いており、環境変数が保持しているものはそのようにマークされます。保存したものが無視されているように見える場合、そのバッジが答えです。

コンテナ内ではこれはエッジケースではありません。 compose.yaml はトランスポート、バインドアドレス、ポート、許可ホストを実際の環境変数として固定します。これらは内部のインストールではなくコンテナに属するためです。それ以外のすべて — APIキー、HTTPトークン、制限 — は設定ボリュームに委ねられ、それが設定インターフェースによる変更を可能にします。

同じ順序がポリシーファイルにも適用され、LXO_MCP_TOOL_POLICY--tools-file は直接ファイルを指定します。インターフェースは起動時に見つけたファイルに固定されるため、ページが自分の対象をあなたの知らないうちにすり替えることはできません。

ファイルの命名

--env-file PATH は検索の代わりに設定ファイルを指定し、--tools-file と組み合わせることで、クライアント設定の1つのエントリが独自のアカウントと独自の権限を持ちます:

"args": ["--env-file", "/path/to/test.env",
         "--tools-file", "/path/to/test-tools.json"]

存在しないパスは、静かに検索にフォールバックするのではなく拒否されます — ただし setup の下では例外で、これはファイルを作成するために存在します。

setup はこのファイルをあなたのために書き込みます。

設定

変数

意味

デフォルト

LXO_MCP_API_KEY

あなたの Lexware Office API キー。必須。

LXO_MCP_TOOL_POLICY

ツールごとのオン/オフファイル、下記参照

設定ディレクトリ内の tools.json

LXO_MCP_BASE_URL

API ベース URL

https://api.lexware.io

LXO_MCP_APP_BASE_URL

ディープリンク用の Web アプリベース

https://app.lexware.de

LXO_MCP_DOWNLOAD_DIR

ダウンロードしたドキュメントの保存先

ユーザーキャッシュディレクトリ

LXO_MCP_TIMEOUT

HTTP タイムアウト(秒)

30

LXO_MCP_RATE

1秒あたりのリクエスト数、全エンドポイントで共通

1.5

LXO_MCP_BURST

トークンバケット容量。アカウントのバケットは4を保持

2

LXO_MCP_PAGE_SIZE

検索がリクエストして返す1ページあたりの行数

25

LXO_MCP_PDF_PAGES

read_download がデフォルトでレンダリングする PDF のページ数

10

LXO_MCP_LOG_LEVEL

stderr のログレベル

INFO

LXO_MCP_TRANSPORT

stdiostreamable-http、または sse

stdio

LXO_MCP_BEARER_TOKEN

すべての HTTP リクエストが保持する共有シークレット。HTTP トランスポートには必須

LXO_MCP_HTTP_HOST

HTTP トランスポートのバインドアドレス

127.0.0.1

LXO_MCP_HTTP_PORT

バインドするポート

8770

LXO_MCP_HTTP_PATH

トランスポートが提供する URL パス

/mcp

LXO_MCP_ALLOWED_HOSTS

ループバック以外に受け入れる Host 値、カンマ区切り

LXO_MCP_GENERATE_BEARER_TOKEN

設定がない場合に起動時にトークンを作成し、設定ファイルに書き込む

off

LXO_MCP_EXIT_ON_CONFIG_CHANGE

設定ファイルが変更されたときにプロセスを終了する(再起動するもの用)

off

上記のすべての設定が使用されています。LXO_MCP_PAGE_SIZE は250に制限されており、これはどのエンドポイントも受け入れる最小のページサイズです。それより大きい値は、後で API エラーになるのではなく、起動時に拒否されます。

トランスポート

stdio がデフォルトであり、Claude Desktop や同等のローカルクライアントが使用するものです: クライアントはサーバーを自身の子プロセスとして起動し、それ以外のものは通信できません。

streamable-HTTPSSE は同じツールをポート上で提供し、コンテナや専用マシン用です:

uvx benethos-lexware-office-mcp --transport streamable-http --port 8770

そのポートの前には2つのものがあり、どちらも省略できません。すべてのリクエストが Authorization: Bearer <token> として保持しなければならないベアラートークンLXO_MCP_BEARER_TOKEN がないと、サーバーは HTTP トランスポートの起動を完全に拒否します。ポートに到達できる誰もがあなたの Lexware 資格情報を使用できてしまうためです。そして SDK のDNSリバインディングガードは、HostOrigin をループバック名の許可リストと照合し、コンテナやプロキシが別の名前を前面に置く場合は --allowed-hosts で拡張されます。

どちらもポートをネットワーク上に公開しても安全にするものではありません。他のプロセスと共有するマシン上で生存可能にするものです。--host はループバック以外の場所にバインドします。これはコンテナが行う必要があることです — それが見かけ上の緩和ではない理由については コンテナ内 を参照してください。

コンテナ内

イメージは linux/amd64linux/arm64 用に公開されているため、実行するためにこのリポジトリのものは何も必要ありません:

docker pull ghcr.io/benethos-hub/lexware-office-mcp:latest

依存するものにはバージョンを固定してください - 正確なリリースには :0.2.2、パッチリリースに追従するには :0.2:latest はすべてのリリースで移動し、:edgemain が保持するものからオンデマンドでビルドされ、リリースではありません。

Compose を使用する場合

docker compose up -d                      # the server, on 127.0.0.1:8770
docker compose --profile setup up -d      # add the configuration interface
docker compose rm -f -s setup             # take the interface away again

docker compose --profile setup down ではありません。 それはプロジェクト全体であり、サーバーも一緒に停止させます。rm -f -s setup は1つのサービスを停止して削除し、サーバーは実行中のままにします。docker compose stop setup も機能し、停止したコンテナを次回のために保持します。

出荷時の compose.yaml はこのチェックアウトからビルドします。2つのサービスのそれぞれにある2行のコメントアウトされた行で公開イメージに切り替わり、そのファイルがここから必要な唯一のものになります。

単一コンテナとして

docker run -d --name lexware-office-mcp \
  --restart unless-stopped \
  -p 127.0.0.1:8770:8770 \
  -v lxo-config:/config -v lxo-downloads:/downloads \
  ghcr.io/benethos-hub/lexware-office-mcp:latest

自分用に生成したトークンは設定ボリュームにあり、そこから読み取ります:

docker exec lexware-office-mcp grep LXO_MCP_BEARER_TOKEN /config/.env

ファイル全体ではなくその1行だけ: キーが入力されると、API キーもそこに含まれるため、スクリーンショットを撮るかもしれないターミナルでスクロールする必要はありません。

設定インターフェースは同じイメージを別のコマンドで実行し、同じボリュームを指します:

docker run --rm -d --name lexware-office-mcp-setup \
  -p 127.0.0.1:8771:8771 \
  -v lxo-config:/config -v lxo-downloads:/downloads \
  ghcr.io/benethos-hub/lexware-office-mcp:latest \
  setup --no-browser --host 0.0.0.0 --port 8771 \
        --env-file /config/.env --tools-file /config/tools.json

--rm で起動されたため、停止することはそれの終わりでもあります:

docker stop lexware-office-mcp-setup

--restart unless-stopped はここでは飾りではありません。 コンテナは設定ファイルが変更されるとプロセスを終了します。これが保存された設定を実行中のサーバーに反映させる仕組みです。再起動ポリシーがないと、終了したままになります。

完了したらインターフェースをオフにする

http://127.0.0.1:8771/ を開き、キーを入力し、ツールにチェックを入れ — そして停止します。誰もあなたの代わりに停止してくれません。 ログインはなく、API キーを受け入れ、マシンが起動している限りそのページを提供し続けます。

docker compose rm -f -s setup             # Compose
docker stop lexware-office-mcp-setup      # a single container
docker ps --filter name=setup             # nothing listed means it is off

サーバーは実行されることを意図しています。インターフェースは、そこで設定している分数だけ実行されることを意図しており、そのため素の docker compose up では起動されず、再起動ポリシーもありません。一度停止すると、再度要求するまで停止したままです。

事前に準備しなければならないものは何もありません。 初回起動時にサーバーがベアラートークンを生成し、それを設定ボリュームに書き込んでその旨を通知します。インターフェースがそれを表示し、それがクライアントが必要とする値です。イメージに焼き込まれるわけではないため、すべてのコピーが同じトークンを共有することはありません。

コンテナは 0.0.0.0 にバインドされますが、これは緩和ではありません。 コンテナ自身のループバック上のプロセスには、公開ポート経由ではまったく到達できません。分離の主体はネットワーク名前空間であり、ポートに到達できるのは公開設定(127.0.0.1 のみにマッピング)によって決まります。

ブラウザで保存した設定は、実行中のサーバーに到達します。 設定は起動時に一度だけ読み込まれるため、設定ファイルが変更されるとコンテナは終了するよう指示され、Compose が1秒後に再起動します。Compose が実際の環境変数として固定するもの(トランスポート、バインドアドレス、ポート、許可ホスト)はコンテナに属するものであり、ボリュームから変更することはできません。設定 を参照してください。

プロンプトの例

サーバーが接続されたら、次のようなプロンプトが想定される使い方です:

  • 「まだ未処理の請求書はどれで、そのうち期限切れはどれですか?」

  • 「今四半期に Muster GmbH 社に請求したすべての内容を表示して。」

  • 「請求書 RE-2024-0142 の内容は何で、支払済みですか?」

  • 「番号 A-1007 の品目を検索して、現在の価格を教えて。」

  • 「最後に発行したクレジットノートの PDF をダウンロードして。」

  • 「Lexware Office で伝票 X を開くリンクを教えて。」

レート制限

Lexware API は毎秒2リクエストを許可しており、トークンバケット で強制されています。この予算はグローバルです。つまり API のすべてのエンドポイントを同時にカバーするため、連絡先の読み取りと請求書の読み取りは同じ許容量から消費されます。

サーバーはこれを、プロセス内のすべてのリクエストで共有される単一のトークンバケットでミラーリングし、デフォルトでは文書化されたレートをわずかに下回る速度で補充します。Lexware は、バッファなしで制限を正確に強制すると、ネットワークのジッターで到着時間がずれた場合にいずれにせよ 429 が発生しがちであると指摘しているため、デフォルトでは余裕を残しています。リクエストは並列で発射されるのではなく、そのバケットを通じて直列化されるため、多くのドキュメントに触れる広範な質問はブロックされる代わりに遅くなります。

知っておくべきことが2つあります:

  • 予算はこのプロセスではなく、あなたのアカウントに属します。サーバーの2番目のインスタンス、別の統合、自分で実行するスクリプトはすべて、同じ毎秒2回の許容量から消費します。

  • Lexware は、429 の後も叩き続けるクライアントは永久にブロックされ続ける可能性があると警告しています。そのためサーバーは指数バックオフを行い、より強く再試行するのではなく、数回の試行で諦めます。

アカウントのバケットは 2026-08-21 に測定され、4 を保持しています。同時に5つのリクエストを発射したところ、4つが通過し、1つが拒否されました。デフォルトの 2 は、同じアカウントから消費する他のすべて(Web アプリ、別の統合、このサーバーの2番目のインスタンス)のためにその半分を残します。このサーバーが唯一のコンシューマであると確信できる場合にのみ、4 に引き上げてください。

アカウントの動作が異なる場合は、両方のリミッター値を LXO_MCP_RATELXO_MCP_BURST で設定できます。

開発

uv sync --extra dev
uv run pytest -q
uv run ruff check .
uv run ruff format --check .
uv run mypy

テストスイートは完全にオフラインです。HTTP レイヤーをモックし、API キーを必要としないため、どこでも実行できます。2種類のテストがプロセスをマシンから離さずに終了させます。3つはサーバーを実際のサブプロセスとして起動し、stdio 経由で MCP を話します。これは起動パスで stdout に何も書き込まれないことを証明するものでもあります。また、設定インターフェースは、実際の Cookie ジャーを備えた実際のループバック HTTP サーバーを通じて駆動されます。CSRF ガードは、ブラウザが遭遇する方法でテストする価値があるからです。

このリポジトリには API キーは同梱されておらず、CI にも含めるべきではないため、チェックアウトだけで Lexware と通信することはできません。したがって、実際の API に対するサーバーの検証は、常にあなたが提供するキーを使った意図的なローカル実行であり、上記のスイートとは別で、その一部になることはありません:

uv run python tests/smoke.py
uv run python tests/smoke.py --env-file path/to/.env

これはあなたのアカウントを読み取り、何も書き込みません。ビルドされるサーバーには read-only プリセットが適用されるため、書き込みツールはそもそも呼び出せません。チェックした内容、アカウントに何もなかった内容、失敗した内容を出力し、レコード ID をマスクするため、レポートをどこかに貼り付けることができます。pytest はこれを実行しません。ライブチェックがゲートではない理由については、SPECS.md のセクション 14.1 を参照してください。

コントリビューションと issue は歓迎します。 SPECS.md には、設計上の決定が、その背後にある根拠と測定値とともに記録されています。

ライセンス

MIT。LICENSE を参照してください。

商標および提携関係

このプロジェクトは、Lexware、Haufe-Lexware GmbH & Co. KG、またはその子会社とは提携、承認、後援の関係にありません。 「Lexware」および「Lexware Office」はそれぞれの所有者の商標であり、ここではこのソフトウェアが統合する API を説明的な意味で命名するためにのみ使用されています。

このソフトウェアは、アカウント所有者が提供し、失効させることができる資格情報を使用して、文書化された公開 API とのみ通信します。その API の使用は Lexware 自身の規約に準拠しており、あなたはこのプロジェクトとは独立にそれを受け入れます。

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    MCP server for DACH accounting automation. Connect AI assistants to sevDesk and Lexoffice — create invoices, manage contacts, handle bookings and vouchers for German-speaking businesses.
    15
    27
    -
  • A
    license
    B
    quality
    A
    maintenance
    MCP server for the Lexware Office API that enables management of invoices, contacts, articles, vouchers, and more through the Model Context Protocol.
    66
    298
    6
    Functional Source , Version 1.1, MIT Future
  • A
    license
    C
    quality
    C
    maintenance
    Enables natural language interaction with the WeFact invoicing platform, allowing users to manage debtors, invoices, products, subscriptions, and perform various administrative tasks via MCP-compatible clients.
    18
    1
    AGPL 3.0
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server for Danish accounting via Billy.dk API, enabling natural-language control over invoices, bank lines, reports, and more, with a write-guard for safety.
    65
    MIT