orcamento
会話型予算 — コアパイプライン
Telegram経由で自然言語による支出記録システム。Google Gemini(公式API、.envでモデル設定可能、デフォルトはgemini-3.6-flash)を言語モデルとして使用し、Nanobotがオーケストレーションし、データはPostgresに保存されます。
このドキュメントは、あなたがDockerを一度も実行したことがないことを前提としており、各ステップ、各コマンド、そしてそれぞれの結果として何が期待されるかを説明します。
目次
Related MCP server: Expense Tracker MCP Server
1. インストールする必要があるもの
あなたのマシンに必要なものは1つだけです。Python、Postgres、Nanobotを個別にインストールする必要はありません。これらはすべてコンテナ内で実行されます。
Docker Desktop(Windows/Mac)または Docker Engine(Linux)
WindowsまたはMac: https://www.docker.com/products/docker-desktop/ からDocker Desktopをダウンロードしてインストールします。インストール後、Docker Desktopアプリを開き、「Docker is running」と表示されるのを待ちます(システムトレイのアイコンが緑色/安定します)。
Linux: お使いのディストリビューションに応じて https://docs.docker.com/engine/install/ を参照し、その後 https://docs.docker.com/engine/install/linux-postinstall/ を参照して、
sudoなしでdockerを実行できるようにします。
すべてが正しく動作しているか確認する
ターミナル(WindowsではPowerShell、Mac/Linuxではターミナル)を開いて、次のコマンドを実行します:
docker --version
docker compose versionエラーなしで2つのバージョン行が表示されるはずです。
2. Telegramでボットのトークンを取得する
Telegram(スマホまたはデスクトップ)を開き、検索で**@BotFather**を探します。これはTelegramの公式ボットで、他のボットを作成するためのものです。認証済みバッジが付いていることを確認してください。
彼に送信:
/newbotボットの名前を尋ねられます。任意の名前で構いません。例:
会話型予算。次にユーザー名を尋ねられます。これはTelegram全体で一意である必要があり、「bot」で終わる必要があります。例:
orcamento_seunome_bot。成功すると、BotFatherは次のようなメッセージで応答します:
Done! Congratulations on your new bot. You will find it at t.me/orcamento_seunome_bot. You can now add a description... Use this token to access the HTTP API: 7123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Keep your token secure and store it safely...トークンの行全体をコピーします(形式は
数字:文字と数字)。次のステップで.envファイルに貼り付けます。
このトークンを保管してください。
3. Gemini APIキーを取得する
NanobotはGoogle Geminiの公式APIを言語モデルとして使用します。
https://aistudio.google.com/api-keys にアクセスし、Googleアカウントでログインします。
Create API keyをクリックします(Googleが自動的にプロジェクトを作成します)。
キーをコピーし、次のステップで
.envに貼り付けます。
コストについて: カードは不要です。無料枠はFlash/Flash-Liteモデルをカバーし、1分あたり/1日あたりのリクエスト制限があります(モデルによって約10 req/min、約250〜1,500 req/day)— このプロジェクトには十分です。Proモデルは有料です。公式表: https://ai.google.dev/gemini-api/docs/pricing
4. .envファイルを設定する
プロジェクトには、フォルダのルート(orcamento-conversacional/.env)に**.env**というファイルがすでに含まれています。これはDocker Composeによって自動的に読み取られます。名前を変更する必要はありません。
注意: ドットで始まるファイル(.env)は、Windowsのエクスプローラー、MacのFinder、Linux/Macのls(フラグなし)ではデフォルトで「隠しファイル」です。ターミナルで表示するにはls -laを使用するか、テキストエディタでフォルダを開いてください。
.env内で、次の2行を実際の値に置き換えます:
TELEGRAM_TOKEN=coloque_seu_token_aqui ← token do BotFather (seção 2)
GEMINI_API_KEY=coloque_sua_chave_aqui ← chave do AI Studio (seção 3)GEMINI_MODEL変数は使用するモデルを定義します(デフォルト: gemini-3.6-flash)。公式リストの有効なIDに変更したい場合のみ変更してください: https://ai.google.dev/gemini-api/docs/models
他の変数(POSTGRES_PASSWORD、DATABASE_URL)はすでに動作する値が設定されています。Dockerで実行するために変更する必要はありません。
ファイルを保存します。
5. Dockerですべてを起動する
orcamento-conversacionalフォルダ(docker-compose.ymlファイルがある場所)内でターミナルを開き、次のコマンドを実行します:
docker compose up -d --buildこのコマンドが行うこと(順番に):
ステップ | 何が起こるか | おおよその時間 |
1 | ベースイメージ(Postgres)をインターネットからダウンロード | 1〜3分(初回) |
2 | Nanobotのイメージをビルド( | 2〜4分(初回) |
3 | Postgresを起動し、 | 数秒 |
4 | Postgresが準備できるのを待ってからNanobotを起動 | 数秒 |
モデルのダウンロードや実行はあなたのマシンでは行われません。GeminiはGoogleのクラウドで実行されます。
-d(「detached」)フラグは、すべてをバックグラウンドで実行します。次回docker compose up -d(--buildなし)を実行すると、数秒で起動します。
すべてがうまくいったかどうかを確認する方法
次のコマンドを実行します:
docker compose ps2つのサービスが表示されるはずです:
NAME IMAGE STATUS
orcamento_postgres postgres:16-alpine Up (healthy)
orcamento_nanobot ...nanobot UpNanobotのログも確認してください。MCPが接続されているはずです:
docker compose logs nanobot次のような行を探してください:
MCP: registered tool 'mcp_orcamento_registrar_despesa' from server 'orcamento'
MCP server 'orcamento': connected, 3 capabilities registered
✓ Health endpoint: http://127.0.0.1:18790/health
bot @seubot connectedorcamento_nanobotが「Restarting」と表示されたり、リストから消えたりした場合は、よくある問題のセクションを参照してください。
6. Telegramでテストする
Telegramで、BotFatherで作成したボットのユーザー名(例:
@orcamento_seunome_bot)を検索し、会話を開きます。/startを送信します。最初の会話では、Nanobotがペアリングコードを要求する場合があります。これはログに表示されます(docker compose logs -f nanobot、行「Generated pairing code ...」)。このコードをボットに送信します。次のようなものを送信します:
Gastei 35 no almoço hoje数秒後、ボットは登録を確認する応答を返すはずです。例:
Registrado: R$ 35,00 em alimentação (almoço).
ボットが何も応答しない場合は、以下のよくある問題のセクションを参照してください。
7. 日常のコマンド
すべてorcamento-conversacionalフォルダ内で実行します。
すべてのログをリアルタイムで表示:
docker compose logs -f(Ctrl+Cで終了します。これはログの表示を停止するだけで、コンテナは実行を続けます。)
Nanobotのみのログを表示(会話のデバッグに最も便利):
docker compose logs -f nanobotすべてを停止(保存されたデータは保持):
docker compose down停止後に再度起動:
docker compose up -dSOUL.md、config.docker.json、または.envを編集した後(イメージを再構築する必要はありません。設定とプロンプトはコンテナに直接マウントされます):
docker compose up -d nanobot # recria o container aplicando o novo .envmcp_server/expense_tools.pyまたはdb/connection.pyを編集した後(MCPのvenvがイメージ内に作成されるため、再構築が必要です):
docker compose up -d --build nanobotデータベースのデータを含むすべてを完全に削除(何かが破損していてゼロからやり直したい場合に便利):
docker compose down -vデータベースに入って、手動で記録された支出を確認:
docker exec -it orcamento_postgres psql -U orcamento -d orcamentopsql内で、試してみてください:
SELECT * FROM despesas ORDER BY criado_em DESC LIMIT 10;psqlを終了するには: \qと入力してEnterを押します。
オプションのショートカット: makeがインストールされている場合(Mac/Linuxでは標準)、プロジェクトには最も使用されるコマンドを含むMakefileが含まれています: make up、make down、make logs、make restart、make ps。
8. よくある問題とその解決方法
Error: Environment variable 'GEMINI_API_KEY' referenced in config is not set
.envにGEMINI_API_KEY変数が定義されていません。.envを開き、その行が存在することを確認し(一時的な値でも)、docker compose up -d nanobotを再度実行してください。
Nanobotのログに401、unauthorized、またはinvalid api keyが表示される
GEMINI_API_KEYが間違っているか、失効しているか、余分なスペースが含まれています。https://aistudio.google.com/api-keys で新しいキーを生成し、.envを更新してください。
429またはレート制限/クォータエラー
Geminiの無料枠の制限(1分あたりまたは1日あたりのリクエスト数)に達しました。オプション: 数分待つ、.envのGEMINI_MODELをFlash-Liteモデル(制限が大きい、例: gemini-3.1-flash-lite)に変更して再度起動する、またはGoogle Cloudアカウントで課金を有効にする。
ログにmodel not foundが表示される
GEMINI_MODELの値がGemini APIの有効なIDではありません。https://ai.google.dev/gemini-api/docs/models の公式リストを確認し、.envを修正してください。
ボットがツールを呼び出さない/登録できないと言う
docker compose logs nanobotを実行し、次のものを探してください:
MCP server 'orcamento': connected— 表示されない場合、組み込みMCPサーバーの起動に失敗しています。その行のすぐ上にあるエラーを確認してください。Max iterations (...) reached— モデルがツール呼び出しのループに入ったことを意味します。設定可能な制限は、configのagents.defaults.maxToolIterationsにあります。
ボットがTelegramで何も応答しない
メッセージを送信しながら
docker compose logs -f nanobotを確認してください。ログに同時に何らかのアクティビティが表示されるはずです。ペアリングを完了したかどうかを確認してください(セクション6、ステップ2)。
docker compose versionが「unknown flag」または存在しないと言う
古いDocker Compose(v1、ハイフン付き: docker-compose)を使用しています。Docker Desktopを更新するか、docker-compose-pluginプラグインを個別にインストールしてください(Linux)。
9. プロジェクトの各ファイルの役割
orcamento-conversacional/
├── .env # SUAS credenciais (token do Telegram, chave
│ # do Gemini, senha do banco). Lido
│ # automaticamente pelo docker compose.
├── .env.example # Modelo de referência do .env, sem credenciais reais.
├── docker-compose.yml # Define os containers (postgres, nanobot) e
│ # a ordem de inicialização.
├── Makefile # Atalhos opcionais (make up, make logs, etc).
├── requirements.txt # Dependências Python do servidor MCP (mcp, psycopg2-binary).
│
├── db/
│ ├── schema.sql # Cria as tabelas usuarios, categorias, despesas.
│ │ # Aplicado automaticamente na 1ª subida do Postgres.
│ └── connection.py # Código Python que conecta no Postgres (pool de conexões)
│ # e resolve o usuário do Telegram para um id interno.
│
├── mcp_server/
│ ├── expense_tools.py # As "ferramentas" que o agente de IA usa:
│ │ # registrar_despesa, listar_despesas, resumo_por_categoria.
│ │ # Roda via stdio DENTRO do container do Nanobot.
│ └── Dockerfile # Imagem standalone opcional do MCP server (modo HTTP).
│
└── nanobot_config/
├── config.json # Config do Nanobot para rodar FORA do Docker
│ # (instalação local — ver seção 10). MCP via stdio
│ # relativo à raiz do projeto.
├── config.docker.json # Config do Nanobot para rodar DENTRO do Docker —
│ # é este que está ativo quando você usa `docker compose up`.
│ # MCP via stdio em /opt/mcpvenv (venv isolado).
├── Dockerfile # Como construir a imagem do Nanobot. Instala o
│ # nanobot + um venv isolado (/opt/mcpvenv) com as
│ # dependências do servidor MCP.
├── SOUL.md # As instruções que dizem ao agente COMO se comportar:
│ # como extrair valor/categoria/data de uma mensagem,
│ # quando pedir confirmação, o que ele NÃO deve fazer ainda.
├── AGENTS.md # Regras gerais de comportamento (idioma, uso de tools,
│ # tratamento de erro). Complementa o SOUL.md.
└── USER.md # Perfil do usuário — começa vazio, o Nanobot vai
preenchendo automaticamente com o tempo.現在のアーキテクチャの詳細
言語モデル: 公式API経由のGoogle Gemini(
providers.gemini)。モデルは.envのGEMINI_MODEL変数で選択されます(デフォルト:gemini-3.6-flash)。ローカルモデルは実行されません。MCPサーバー: Nanobotコンテナ内でサブプロセス(stdio)として実行され、分離されたvenv
/opt/mcpvenvを使用します。なぜ分離するのか?ツールが使用するPython SDKmcp2.xは、nanobot自体が要求するバージョン(mcp>=1.26,<2)と競合するためです。ループ防止:
agents.defaults.maxToolIterations: 6は、エージェントが1ターンで連続して実行できるツール呼び出しの数を制限します。
なぜNanobotの設定ファイルが2つあるのか?
config.json(Docker外でローカルに実行するため)は、プロジェクトルートを基準にしたstdioを介してMCPサーバーを指します。config.docker.json(Docker内で使用)は、コンテナの絶対パス(/opt/mcp_server/...)とvenv /opt/mcpvenv/bin/python3を使用します。
10. 代替案: ローカルインストール(Dockerなし)
コンテナではなく、マシン上で直接Postgres/Nanobotを実行したい場合(設定は面倒ですが、行ごとのデバッグは簡単です):
10.1. PostgresのみをDockerで起動
docker compose up -d postgres(これによりPostgresのみが起動します。schema.sqlは自動的に適用されます。)
10.2. MCPサーバーのPython依存関係をインストール
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt同じターミナルで環境変数をエクスポートします:
export DATABASE_URL=postgresql://orcamento:orcamento@localhost:5432/orcamento
export TELEGRAM_TOKEN=seu_token_aqui
export GEMINI_API_KEY=sua_chave_aqui
export GEMINI_MODEL=gemini-3.6-flash(Windows PowerShellでは、$env:DATABASE_URL = "..."などを使用します。)
10.3. Nanobotをインストールして実行
pip install -U nanobot-ainanobot_config/config.jsonを~/.nanobot/config.jsonにコピーし、nanobot_config/SOUL.mdを~/.nanobot/workspace/SOUL.mdにコピーします(workspaceフォルダが存在しない場合は作成します)。
このプロジェクトのルートから実行します(config.jsonのMCPサーバーのパスはこのディレクトリを基準にしています):
nanobot gateway --config nanobot_config/config.json --verboseTelegramなしでテスト(抽出のデバッグに便利)
nanobot agent -c nanobot_config/config.json -m "Paguei 120 no mercado no cartão hoje"11. プロジェクトの次のステップ
実際のメッセージでエンドツーエンドのフローをテストし、観察された抽出エラー(非公式な言語、略語、曖昧な値)に応じて
SOUL.mdを調整する。完全なレポートのツールを追加する(期間比較、支出の推移)。
レコメンデーション層を実装する:
resumo_por_categoriaのデータを統合し、API経由で高度なLLMに送信する。認証されたTelegramユーザーに支出を自動的にリンクする(現在は
telegram_idがモデルによってツール呼び出し時に渡される)。
検証に関する注意
パイプラインはDockerでの実際の実行で検証済み: コンテナが起動し、MCPがstdio経由で3つのツールが登録された状態で接続され、Postgresへの挿入が psql で確認された。docker-compose.yml と設定JSONの構文は、各起動前に検証される。
docker compose up で正確に停止した場合は、セクション 8. 一般的な問題 から始めてください。
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage personal expenses through natural language conversations. Supports adding, searching, and analyzing transactions with automatic categorization and financial insights.3MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage personal expenses through natural conversation, supporting expense tracking, categorization, filtering, and financial summaries. Uses SQLite database to store expense records with full CRUD operations for comprehensive personal finance management.1
- FlicenseCqualityDmaintenanceEnables AI assistants to manage personal finances by storing, analyzing, and exporting expense data using a persistent PostgreSQL database. Supports adding/editing expenses, generating spending summaries, detecting top categories, and creating monthly reports.12
- FlicenseNot gradedqualityDmaintenanceEnables natural language management of personal expenses, including adding, listing, and summarizing expenses with local SQLite storage.
Related MCP Connectors
Personal finance by conversation: expenses, receipts, statement import, budgets, net worth.
Multi-tenant Telegram gateway for AI agents — HTTP+stdio, 8 tools, MTProto User API
Log, query, and edit expenses, budgets, and accounts in Ledgy from any MCP-compatible AI assistant.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/vinimeurer/orcamento-conversasional'
If you have feedback or need assistance with the MCP directory API, please join our Discord server