@expertcustom/funilaria-mcp
@expertcustom/funilaria-mcp
Aurora の AI が Funilaria & Pintura ポータルへの書き込みと読み取りに使用する、型付きツールを備えた MCP(Model Context Protocol)サーバーです。
mcp-fetch を置き換え、システムプロンプトに書かれたシークレットを使って HTTP リクエストを手組みします。ここでは、各操作がスキーマ、説明、エラーをポルトガル語で備えたツールになっています。
IA do Aurora ──stdio──> npx @expertcustom/funilaria-mcp ──HTTPS──> backend NestJSADR-001 に従い、このパッケージはアダプターです。ここにビジネスルールは一切ありません。すべてのツールは既存のエンドポイントを呼び出すだけで、意思決定は引き続きバックエンドのサービスが担います。
ツール
ツール | エンドポイント | 認証 | 説明 |
|
| サービス | 記事を CMS へ下書きとして配信します。公開は引き続き人間の操作です。 |
|
| サービス | サプライヤーの生の応答を WhatsApp に登録します。バックエンドが価格、納期、条件を抽出します。 |
|
| サービス | 従業員のメッセージから材料消費を記録します。返信に使う本文を |
|
| サービス + | ショップの材料残高を取得し、最小在庫を下回っている項目を強調表示します。 |
|
| サービス + | 期間内の消費・入庫・ロス・コストを、材料別・従業員別に取得します。 |
|
| 公開 | 名前、種類、カテゴリ、地域で絞り込めるサプライヤーのディレクトリです。 |
認証
明示的な shopId を伴うサービスの資格情報が、書き込みと読み取りの両方で主経路です。ヘッダー x-aurora-secret は、バックエンドの AURORA_WEBHOOK_SECRET と同値です。これは個人を表すのではなく、サービスを表します。
複数のショップを担当する AI にはセッションがありません。したがって、ショップはパラメーターであり、暗黙のコンテキストではありません。バックエンド側では、これは在庫読み取りルートの @AllowService() に相当します。JwtAuthGuard は JWT の代わりにシークレットを受け入れ、ShopContextGuard は shopId を必須にします。存在しない ID に対しては 404 Oficina não encontrada を返し、「ショップに在庫がない」と誤解される空のリストは返しません。
ユーザーセッション(POST /auth/entrar の JWT)は、ローカル開発向けに引き続きサポートされています。shopId がない場合、ショップはセッションから取得されます。アクセストークンは約15分で失効するため、クライアントはリフレッシュトークンで自動更新し、ローテーション後のペアを書き直します。このモードで shopId を渡すと、理由とともに即座に拒否されます。このルートは、要求されたショップであるかのようにセッションのショップを返すことになるためです。
設定 — env が主経路
本番では、このプロセスを起動するのは Aurora のランタイムで、環境変数を注入します。端末は存在せず、ログインコマンドも実行されません。このサーバーはディスクが完全に空の状態でも動作します。
環境変数 | 受け入れ可能なエイリアス | 用途 |
|
| API のベース URL |
|
| サービスシークレット( |
|
| HMAC 署名シークレット(オプション) |
| — |
|
| — | ユーザー JWT(あれば)(オプション) |
このエイリアスを用意しているのは、バックエンドの .env をコピーした際に、プレフィックスが異なるためにシークレットが「消えたように見える」というよくあるミスへの対策です。AURORA_WEBHOOK_SECRET は両側でまったく同じ値です。
シークレットはハードコードも、プロンプトからの読み取りもされません。~/.config/funilaria-mcp/credentials.json(モード 0600)はローカル開発のための便宜です。env が常に優先され、env の値がディスクに書き込まれることはありません。
起動時に、サーバーは stderr(stdout は MCP プロトコル専用)に、何が設定されているか、各設定がどの env から来たかを表す行を書き込みます。実際の値は書きません。これは、環境変数名を間違えた場合に Aurora のログに表示される内容です。
[funilaria-mcp] API: https://api.exemplo.com (FUNILARIA_API_URL) · Credencial de serviço: configurada via AURORA_WEBHOOK_SECRET · ...
[funilaria-mcp] Sem credencial de serviço: as tools de escrita vão recusar toda chamada. Defina FUNILARIA_SERVICE_SECRET no ambiente deste processo.HMAC 署名
FUNILARIA_SIGNING_SECRET が存在する場合、すべての書き込みには次のものも追加されます。
x-timestamp: <epoch em segundos>
x-signature: sha256=<HMAC-SHA256(`${timestamp}.${corpo}`)>これは ADR-001 で計画された改善です(リプレイとログ経由の漏えいを防ぎます)。バックエンドはまだ検証していません — 未知のヘッダーは無視されるため、既存の稼働中クライアントをおかしくせずにサーバー側だけを有効化できます。
インストール
Aurora の AI で(本番)
MCP の登録情報そのものに変数を設定してサーバーを登録します — ログインもシステムプロンプトへのシークレット記載もありません。
{
"command": "npx",
"args": ["-y", "@expertcustom/funilaria-mcp"],
"env": {
"FUNILARIA_API_URL": "https://<api-do-portal>",
"FUNILARIA_SERVICE_SECRET": "<mesmo valor de AURORA_WEBHOOK_SECRET>"
}
}ローカル開発
# opção A — env no shell (igual à produção)
FUNILARIA_API_URL=http://localhost:3334 FUNILARIA_SERVICE_SECRET=... npx @expertcustom/funilaria-mcp
# opção B — guardar em ~/.config para não exportar em todo shell
npx @expertcustom/funilaria-mcp login-servico
# sessão de usuário: só é necessária para consultar_estoque sem shopId
npx @expertcustom/funilaria-mcp login
# conferir o que está valendo e de onde veio (nunca imprime segredo)
npx @expertcustom/funilaria-mcp status
# registrar no Claude Code
claude mcp add funilaria --env FUNILARIA_API_URL=http://localhost:3334 -- npx -y @expertcustom/funilaria-mcpバックエンドの未解決事項
当初の4件(到達不能な在庫 Webhook、サービスの資格情報なしでの読み取り、検証後にチェックされていた始末、デッドコードとしての距離)は、バックエンドで修正済みであり、localhost:3334 に対して再検証済みです。残っているのは次のとおりです。
Aurora の AI には
shopIdを見つける手段がありません。 それは AI が暗記する必要がある唯一の情報です。現在はFUNILARIA_SHOP_ID経由でしか取得できず、そのせいで1サーバーが1ショップに固定されてしまい、サービス設計の動機となったマルチショップのケースが壊れています。最も解決コストが低いのは
lancar_consumoです。バックエンドは WhatsApp 番号から従業員とショップをすでに特定しています が、返すのは確認用テキストだけです。IntakeResultがshopIdとmemberIdを含んでいれば、「ニスを100ml使った」→「今月はいくら使った?」という会話が成立し、両方の ID を持ってconsultar_balanceteを呼べます。それがなければ、2つ目の質問にはどうしても答えられません。GET /estoque/movimentosが@AllowService()の対象外のままです。ListMovementsDtoにはshopIdが宣言されていますが、そのルートはサービスの資格情報を受け付けないため、このパラメータは使えないままです。このルートに認証を付けるか、あるいは存在しない機能を示唆しないように DTO からフィールドを削除すべきです。HMAC 署名はまだ検証されていません。 署名シークレットがある場合、クライアントはすでに
x-timestampとx-signatureを送信しています(上記参照)。ADR-001 が想定する、リプレイとログ漏えいを防ぐサーバー側の検証がまだ必要です。
開発
npm install
npm run build # tsc estrito, gera dist/
npm start # sobe o servidor MCP em stdioThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
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/adventureandre/funilaria-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server