# Agent Contas FIRST migrado para Agent Framework OCI Este projeto é uma versão executável do **Agent Contas FIRST** migrada para o padrão do **Agent Framework OCI**. Ele implementa um agente de atendimento para dúvidas e operações de contas/faturas de telecom, mantendo a lógica específica do domínio de contas em uma camada fina e delegando workflow, roteamento, guardrails, judges, memória, RAG, MCP, cache e observabilidade para o framework corporativo. > Observação de segurança: o arquivo `.env.example` do pacote contém exemplos de valores sensíveis. Este README explica os parâmetros, mas não reproduz senhas, tokens, chaves privadas nem secrets. Para uso real, mantenha esses valores fora do Git e injete por vault, secret manager, variável de ambiente segura ou arquivo `.env` local não versionado. ## O que é este projeto O pacote contém quatro partes principais: | Parte | Caminho | Função | |---|---|---| | Backend do agente | `app/` | API FastAPI que expõe `/gateway/message`, normaliza canal, resolve identidade, executa o workflow LangGraph e chama o Agent Contas. | | Configurações do framework | `config/` e `llm_profiles.yaml` | YAMLs de agente, roteamento, guardrails, judges, identity, MCP servers, tools e mapeamento de parâmetros. | | MCP Server legado TIM/FIRST | `mcp_servers/legacy_tim_mcp/` | Adaptador HTTP MCP que expõe tools no contrato esperado pelo framework e chama APIs TIM/FIRST ou mock. | | Mock de serviços externos | `backend_mock/` | Servidor FastAPI que simula endpoints TIM/FIRST como fatura, contrato, VAS, PDF, protocolo, contestação, status, SMS e tracking. | O projeto também mantém `legacy_reference/` apenas como referência de rastreabilidade do legado. A decisão de migração foi não portar a camada própria de workflow/guardrails/judges/RAG do legado, evitando duplicidade com o Agent Framework OCI. ## O que é o Agente de Contas O **Agente de Contas** é um agente especializado no domínio `telecom_contas`. Ele atende perguntas e fluxos relacionados a fatura, pagamento, segunda via, contestação, plano, serviços adicionais, protocolos e SMS. No código, a lógica específica fica principalmente em: - `app/agents/contas_agent.py`: comportamento de domínio, prompt do agente, seleção declarativa de tools por intent e montagem de contexto com RAG/MCP. - `config/routing.yaml`: intents suportadas e tools relacionadas. - `config/tools.yaml`: catálogo das tools MCP disponíveis. - `config/mcp_parameter_mapping.yaml`: mapeamento das chaves canônicas de negócio para argumentos reais das APIs TIM/FIRST. - `config/identity.yaml`: resolução de identidade e aliases, como `msisdn`, `invoice_id`, `asset_id`, `ura_call_id` e `session_id`. ## Funcionalidades prometidas pelo agente ### Atendimento de faturas e contas - Explicar fatura, valor, vencimento, status e itens cobrados. - Consultar fatura completa via `consultar_fatura`. - Consultar pagamentos e baixa via `consultar_pagamentos`. - Ajudar em dúvidas sobre cobrança proporcional, divergência de valor e histórico de cobrança. ### Segunda via e PDF - Recuperar dados da fatura atual. - Recuperar PDF ou segunda via quando disponível via `recuperar_pdf_fatura`. - Preparar envio de informações de boleto/código por canal, quando a política permitir. ### Contestação e protocolo - Identificar intenção de contestar cobrança. - Consultar evidências antes de orientar o cliente. - Abrir contestação via `abrir_contestacao`, marcada como ação sensível e com confirmação requerida. - Registrar protocolo via `registrar_protocolo`. - Consultar status de protocolo/SR via `consultar_status_sr`. - Atualizar status de SR via `atualizar_status_sr`, também como ação sensível. ### Plano, serviços e VAS - Consultar plano/contrato ativo via `consultar_plano`. - Listar serviços ativos, VAS/SVA, bundles e benefícios via `listar_servicos`. - Orientar cancelamento ou bloqueio de VAS. - Executar `cancelar_vas` e `bloquear_vas` apenas como ações com confirmação explícita. ### SMS e tracking operacional - Enviar SMS via `enviar_sms`, com confirmação. - Registrar tracking/activity via `registrar_tracking`. ### Segurança, qualidade e observabilidade - Guardrails de entrada e saída configuráveis por YAML. - Judges de qualidade, groundedness, sentimento e tom. - Output Supervisor com retry. - Eventos IC/NOC/GRL e telemetria Langfuse/OTEL. - Cache MCP para consultas. - Memória conversacional e summary memory. ## Como ele funciona com o Agent Framework OCI A arquitetura de execução é: ```text Frontend / curl / canal ↓ FastAPI backend: POST /gateway/message ↓ ChannelGateway do Agent Framework OCI ↓ IdentityResolver + BusinessContext ↓ SessionRepository + Memory + Summary Memory ↓ Workflow LangGraph do template ↓ Input Guardrails ↓ Enterprise Router / routing.yaml ↓ ContasAgent / AgentRuntimeMixin ↓ RAG nativo + MCPToolRouter nativo ↓ legacy_tim_mcp ↓ APIs TIM/FIRST reais ou backend_mock ↓ LLM + Output Supervisor + Output Guardrails + Judges ↓ Resposta final + telemetria + persistência ``` O backend inicializa os componentes nativos em `app/main.py`: - `ChannelGateway` para normalizar mensagens de web/voz/WhatsApp/texto. - `IdentityResolver` para transformar `msisdn`, `invoice_id`, `asset_id`, `ura_call_id` etc. em `BusinessContext` canônico. - `AgentProfileRegistry` para carregar o agente `contas_first`. - `create_llm`, `create_memory`, `create_conversation_summary_memory`, `create_session_repository`, `create_checkpoint_repository`, `create_cache` e `create_usage_repository`. - `create_mcp_tool_router` para carregar `config/mcp_servers.yaml`, `config/tools.yaml` e `config/mcp_parameter_mapping.yaml`. - `AgentWorkflow` para executar o pipeline LangGraph corporativo. ## Integração com o framework O projeto usa o Agent Framework OCI nos seguintes pontos: | Recurso do framework | Como é usado no projeto | |---|---| | LangGraph workflow | `app/workflows/agent_graph.py` orquestra o pipeline corporativo. | | AgentRuntimeMixin | `ContasAgent` herda de `AgentRuntimeMixin` para usar RAG, MCP, memória, cache e montagem de prompt. | | Enterprise Router | `config/routing.yaml` define intents, prioridades, keywords, exemplos e tools por intent. | | Guardrails | `config/guardrails.yaml` ativa MSK/VLOOP na entrada e REVPREC/PINJ/DLEX_OUT na saída. | | Judges | `config/judges.yaml` define `response_quality`, `groundedness`, `sentiment` e `tone`. | | Output Supervisor | Controlado por `ENABLE_OUTPUT_SUPERVISOR` e `OUTPUT_SUPERVISOR_MAX_RETRIES`. | | IdentityResolver | `config/identity.yaml` converte aliases de canal/legado em chaves canônicas. | | BusinessContext | Chaves `customer_key`, `contract_key`, `interaction_key`, `account_key`, `resource_key`, `session_key` acompanham todo o fluxo. | | MCPToolRouter | Executa tools declaradas em `config/tools.yaml` no servidor `legacy_tim`. | | MCP Parameter Mapping | `config/mcp_parameter_mapping.yaml` converte chaves canônicas em argumentos como `msisdn`, `invoice_id`, `customer_id`, `asset_id`. | | Cache MCP | Queries têm cache configurado por tool em `config/tools.yaml`. | | RAG | Usa o RAG nativo do framework, com namespace `contas_first` na metadata do agente. | | Memória | Usa histórico e summary memory do framework. | | Observabilidade | Usa Telemetry, Langfuse, IC/NOC/GRL e analytics publisher. | | SSE | `SSEHub` permite eventos de fluxo quando o endpoint SSE estiver em uso. | ## Customizações específicas do Contas As customizações de domínio são intencionais e concentradas: 1. **Intents de contas** em `config/routing.yaml`: - `billing_invoice_explanation` - `billing_payment_status` - `billing_second_copy` - `billing_contestation` - `service_plan_information` - `vas_services_information` - `generic_billing_rag` - `billing_protocol_status` - `billing_protocol_register` - `vas_cancel_or_block` - `send_billing_sms` - `tracking_activity` 2. **Tools de telecom** em `config/tools.yaml`: - consultas com cache: `consultar_fatura`, `consultar_pagamentos`, `consultar_plano`, `listar_servicos`, `recuperar_pdf_fatura`, `consultar_status_sr`; - ações sem cache e com confirmação quando sensíveis: `registrar_protocolo`, `abrir_contestacao`, `atualizar_status_sr`, `cancelar_vas`, `bloquear_vas`, `enviar_sms`, `registrar_tracking`. 3. **MCP Server legado** em `mcp_servers/legacy_tim_mcp/main.py`, que adapta endpoints TIM/FIRST ao contrato MCP: ```http GET /mcp/tools/list POST /mcp/tools/call ``` 4. **Mock de backend externo** em `backend_mock/app.py`, útil para testar o MCP sem depender das APIs reais. 5. **Prompt específico do agente**, em `ContasAgent.run()`, instruindo o modelo a não inventar dados de fatura, pagamento, plano, VAS, protocolo ou contestação e a usar resultados MCP/RAG como evidência. ## Tecnologias utilizadas - Python 3.11/3.12 recomendado. - FastAPI e Uvicorn. - Pydantic e pydantic-settings. - LangGraph e LangChain Core. - Agent Framework OCI. - OCI Generative AI / OCI SDK. - Oracle Autonomous Database / `oracledb`, quando usado para persistência/RAG. - Redis, opcional para cache distribuído. - Langfuse, opcional para traces. - OpenTelemetry, opcional para exportação OTEL. - HTTPX para chamadas HTTP do MCP legado. - YAML para configuração declarativa. - Docker Compose opcional. ## Requisitos para subir a aplicação ### Obrigatórios - Python 3.11 ou 3.12. - `pip` e `venv`. - Agent Framework OCI instalado no mesmo ambiente Python do backend. - Portas livres: - `8000`: backend do agente; - `5173`: frontend; - `8100`: MCP Server legado; - `8001`: mock das APIs externas. ### Para execução real com OCI/ADB - Acesso ao OCI Generative AI ou endpoint OCI configurado. - `OCI_CONFIG_FILE`, `OCI_PROFILE`, `OCI_REGION`, `OCI_COMPARTMENT_ID` e modelo/endpoint válidos. - Acesso ao Autonomous Database se `VECTOR_STORE_PROVIDER=autonomous` ou repositórios forem configurados para ADB. - Wallet/DSN/senha conforme o modo de conexão. ### Para observabilidade - Langfuse local ou remoto se `ENABLE_LANGFUSE=true`. - Redis se `ENABLE_REDIS_CACHE=true`. - OTEL collector se `ENABLE_OTEL=true`. ## Instalação inicial No diretório raiz do projeto: ```bash cd first_contas python -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env ``` Instale o framework no mesmo ambiente. Exemplo em modo editable: ```bash pip install -e "../agent_framework" ``` Ajuste o caminho para o local real do seu `agent_framework_oci`. ## Configuração recomendada para teste local com mock externo Para testar o fluxo completo com **backend + MCP + mock server**, deixe o MCP chamando o mock HTTP local. No `.env` do backend e no `.env` do MCP, ajuste endpoints para `localhost:8001`: ```env TIM_MCP_USE_MOCK=false TIM_COMPLETE_INVOICES_URL=http://localhost:8001/customers/v1/completeInvoices TIM_PROFILE_BILL_URL=http://localhost:8001/customers/v1/completeInvoices/profile TIM_CONTRATO_URL=http://localhost:8001/access/v1/contractInformation TIM_QUERY_VAS_URL=http://localhost:8001/access/v1/productsSingleVas TIM_CANCEL_VAS_URL=http://localhost:8001/access/v1/singleVas TIM_BLOCK_VAS_URL=http://localhost:8001/customers/v1/createPartialBlocking TIM_BILL_PDF_URL=http://localhost:8001/invoices/v1/invoiceRecover TIM_PROTOCOL_URL=http://localhost:8001/customers/v1/backOfficeSRopening TIM_CUSTOMER_CONTESTATION_URL=http://localhost:8001/interactions/v1/customerContestation TIM_SERVICE_REQUEST_STATUS_URL=http://localhost:8001/interactions/v1/statusServiceRequest TIM_SMS_URL=http://localhost:8001/customers/v1/smsSend TIM_TRACKING_ACTIVITIES_URL=http://localhost:8001/customers/v1/trackingActivities ``` Também é possível usar `TIM_MCP_USE_MOCK=true`; nesse modo o MCP usa mock interno e não precisa do `backend_mock`. Como você pediu a subida dos quatro terminais, o modo recomendado acima mantém o `backend_mock` participando do fluxo. ## Como abrir os 4 terminais para subir a aplicação toda ### Terminal 1 — MCP Server legado TIM/FIRST ```bash cd first_contas ./scripts/start_legacy_tim_mcp.sh ``` Alternativa manual: ```bash cd first_contas/mcp_servers/legacy_tim_mcp python -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env uvicorn main:app --host 0.0.0.0 --port 8100 --reload ``` Teste: ```bash curl -s http://localhost:8100/health | python -m json.tool curl -s http://localhost:8100/mcp/tools/list | python -m json.tool ``` ### Terminal 2 — Mock server das APIs externas ```bash cd first_contas/backend_mock python -m venv .venv source .venv/bin/activate pip install fastapi 'uvicorn[standard]' uvicorn app:app --host 0.0.0.0 --port 8001 --reload ``` Teste: ```bash curl -s http://localhost:8001/health | python -m json.tool ``` ### Terminal 3 — Backend do agente ```bash cd first_contas ./scripts/start_backend.sh ``` Alternativa manual: ```bash cd first_contas source .venv/bin/activate uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload ``` Teste: ```bash curl -s http://localhost:8000/health | python -m json.tool curl -s http://localhost:8000/debug/mcp/call/consultar_fatura -H 'Content-Type: application/json' -d '{"business_context":{"customer_key":"11999999999","contract_key":"FAT-2026-06","account_key":"CUST-001","interaction_key":"URA-001"}}' | python -m json.tool ``` ### Terminal 4 — Frontend Este pacote não traz o código do frontend. Use o frontend do `agent_framework_oci` ou o projeto de frontend que você já usa com o backend do framework. Exemplo: ```bash cd "/agent_framework_oci/agent_frontend" npm install npm run dev -- --host 0.0.0.0 --port 5173 ``` No frontend, configure a URL do backend como: ```text http://localhost:8000 ``` E use `agent_id`: ```text contas_first ``` Payload mínimo esperado pelo backend: ```json { "channel": "web", "tenant_id": "default", "agent_id": "contas_first", "payload": { "text": "Quero entender por que minha fatura veio mais alta", "session_id": "sess-contas-001", "user_id": "11999999999", "customer_key": "11999999999", "contract_key": "FAT-2026-06", "account_key": "CUST-001", "interaction_key": "URA-001", "channel": "web" } } ``` ## Testes por curl incluídos no pacote Depois de subir os serviços: ```bash cd first_contas ./tests/curl_mcp_health.sh ./tests/curl_mcp_consultar_fatura.sh ./tests/curl_backend_health.sh ./tests/curl_backend_debug_mcp.sh ./tests/curl_gateway_fatura.sh ``` ## Endpoints principais | Endpoint | Serviço | Descrição | |---|---|---| | `GET /health` | Backend | Health check do backend do agente. | | `POST /gateway/message` | Backend | Entrada principal de mensagens normalizadas ou payloads de canal. | | `POST /debug/mcp/call/{tool}` | Backend | Diagnóstico direto de chamada MCP com `business_context`. | | `GET /health` | MCP | Health check do MCP legado. | | `GET /mcp/tools/list` | MCP | Lista tools disponíveis no servidor MCP. | | `POST /mcp/tools/call` | MCP | Executa uma tool MCP. | | `GET /health` | Mock | Health check do backend mock. | ## BusinessContext e mapeamento MCP O framework trabalha com chaves canônicas: ```json { "customer_key": "11999999999", "contract_key": "FAT-2026-06", "account_key": "CUST-001", "interaction_key": "URA-001", "resource_key": "ASSET-001", "session_key": "sess-contas-001" } ``` O `MCPToolRouter` converte essas chaves para os parâmetros reais de cada tool. Exemplos: | Tool | Mapeamento principal | |---|---| | `consultar_fatura` | `customer_key → msisdn`, `contract_key → invoice_id`, `account_key → customer_id`, `interaction_key → ura_call_id`, `session_key → session_id` | | `consultar_pagamentos` | `customer_key → msisdn`, `account_key → customer_id`, `interaction_key → ura_call_id` | | `consultar_plano` | `customer_key → msisdn`, `resource_key → asset_id`, `account_key → customer_id` | | `listar_servicos` | `customer_key → msisdn`, `resource_key → asset_id` | | `abrir_contestacao` | `customer_key → msisdn`, `contract_key → invoice_id`, `account_key → customer_id` | | `cancelar_vas`/`bloquear_vas` | `customer_key → msisdn`, `resource_key → app_id` | ## Arquivos mais importantes | Arquivo | Descrição | |---|---| | `README.md` | README original do pacote, com visão geral da migração. | | `README_MIGRACAO_CONTAS_FIRST.md` | Decisões de migração e rastreabilidade. | | `.env.example` | Exemplo de configuração completa. | | `app/main.py` | Bootstrap FastAPI e inicialização dos componentes do framework. | | `app/agents/contas_agent.py` | Agente específico de Contas. | | `app/agents/runtime.py` | Mixin/apoio runtime do agente. | | `app/workflows/agent_graph.py` | Workflow LangGraph corporativo. | | `config/agents.yaml` | Registro do agente `contas_first`. | | `config/routing.yaml` | Intents, priorities, keywords e tools por intent. | | `config/tools.yaml` | Catálogo declarativo de tools MCP. | | `config/mcp_servers.yaml` | Servidor MCP `legacy_tim` em `http://localhost:8100/mcp`. | | `config/mcp_parameter_mapping.yaml` | Mapeamento BusinessContext -> args das tools. | | `config/identity.yaml` | Resolução de aliases de identidade. | | `config/guardrails.yaml` | Guardrails globais. | | `config/judges.yaml` | Judges globais. | | `mcp_servers/legacy_tim_mcp/main.py` | Servidor MCP legado adaptador TIM/FIRST. | | `backend_mock/app.py` | Mock de endpoints externos TIM/FIRST. | | `scripts/start_backend.sh` | Script para subir backend. | | `scripts/start_legacy_tim_mcp.sh` | Script para subir MCP legado. | | `tests/*.sh` | Curls de validação. | ## Docker Compose opcional O pacote inclui `docker-compose.yml` com dois serviços: - `legacy-tim-mcp`, porta `8100`; - `agent-contas`, porta `8000`. Execução: ```bash cd first_contas cp .env.example .env cp mcp_servers/legacy_tim_mcp/.env.example mcp_servers/legacy_tim_mcp/.env docker compose up --build ``` O compose não inclui o frontend nem o `backend_mock`; para testar com mock externo no Docker, adicione um serviço adicional ou rode o mock localmente e ajuste as URLs conforme a rede do container. ## Lista de parâmetros `.env` Abaixo estão os parâmetros encontrados em `.env.example`, explicados por finalidade. Os valores concretos devem ser preenchidos no `.env` local ou por secrets. Não copie tokens/senhas reais para documentação ou repositório. ### Geral | Parâmetro | Para que serve | |---|---| | `APP_NAME` | Nome lógico da aplicação usado em logs, telemetria e identificação operacional. | | `APP_ENV` | Ambiente de execução, por exemplo local, dev, hml ou prod. | | `LOG_LEVEL` | Nível de log da aplicação Python/FastAPI. | | `API_HOST` | Host/IP usado pelo Uvicorn para publicar o backend. | | `API_PORT` | Porta HTTP do backend do agente. | | `CORS_ORIGINS` | Origens permitidas para chamadas do frontend/browser. | ### Mapeado a partir das variáveis TIM_LLM_* do legado. | Parâmetro | Para que serve | |---|---| | `LLM_PROVIDER` | Provider principal de LLM usado pelo Agent Framework OCI. | | `LLM_TEMPERATURE` | Temperatura padrão do modelo para controlar criatividade/variação. | | `LLM_MAX_TOKENS` | Limite máximo padrão de tokens de resposta. | | `LLM_TIMEOUT_SECONDS` | Timeout padrão para chamadas ao LLM; zero normalmente significa sem timeout específico. | | `OCI_GENAI_BASE_URL` | Endpoint/base URL do serviço OCI Generative AI ou endpoint dedicado. | | `OCI_GENAI_MODEL` | Modelo ou endpoint OCID usado pelo OCI Generative AI. | | `OCI_GENAI_API_KEY` | Chave de API quando o provider usa modo compatível com API key. | | `OCI_CONFIG_FILE` | Caminho do arquivo de configuração OCI local. | | `OCI_PROFILE` | Profile OCI dentro do arquivo config. | | `OCI_COMPARTMENT_ID` | OCID do compartment onde ficam os recursos de GenAI/embedding. | | `OCI_REGION` | Região OCI usada pelo SDK/serviços. | ### Variáveis OCI legadas mantidas para compatibilidade com adapters/scripts. | Parâmetro | Para que serve | |---|---| | `TIM_LLM_PROVIDER` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_MODEL` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_API_KEY` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_BASE_URL` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_API_VERSION` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_TEMPERATURE` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_MAX_TOKENS` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_REQUEST_TIMEOUT` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_EXTRA` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_OCI_VARIANT` | Configuração legada OCI usada por adapters/scripts do Agent Contas FIRST. | | `TIM_LLM_OCI_MODEL_ID_20B` | OCID/model id legado para variante específica do LLM OCI. | | `TIM_LLM_OCI_MODEL_ID_120B` | OCID/model id legado para variante específica do LLM OCI. | | `TIM_LLM_OCI_SERVICE_ENDPOINT` | Configuração legada OCI usada por adapters/scripts do Agent Contas FIRST. | | `TIM_LLM_OCI_MODEL_KWARGS` | JSON com parâmetros do modelo OCI legado, como temperature, top_p, max_tokens e reasoning_effort. | | `TIM_LLM_OCI_MODEL_KWARGS_20B` | JSON com parâmetros do modelo OCI legado, como temperature, top_p, max_tokens e reasoning_effort. | | `TIM_LLM_OCI_MODEL_KWARGS_120B` | JSON com parâmetros do modelo OCI legado, como temperature, top_p, max_tokens e reasoning_effort. | | `TIM_LLM_OCI_COMPARTMENT_ID` | Configuração legada OCI usada por adapters/scripts do Agent Contas FIRST. | | `TIM_OCI_USER` | Credencial/configuração OCI legada usada pelos adapters do legado. | | `TIM_OCI_FINGERPRINT` | Credencial/configuração OCI legada usada pelos adapters do legado. | | `TIM_OCI_TENANCY` | Credencial/configuração OCI legada usada pelos adapters do legado. | | `TIM_OCI_REGION` | Credencial/configuração OCI legada usada pelos adapters do legado. | | `TIM_OCI_KEY_FILE` | Credencial/configuração OCI legada usada pelos adapters do legado. | | `TIM_LLM_OCI_AUTH_FILE_LOCATION` | Configuração legada OCI usada por adapters/scripts do Agent Contas FIRST. | ### Repositórios / persistência do framework | Parâmetro | Para que serve | |---|---| | `SESSION_REPOSITORY_PROVIDER` | Provider do repositório de sessões do framework, como memory ou autonomous. | | `MEMORY_REPOSITORY_PROVIDER` | Provider da memória conversacional/histórico. | | `CHECKPOINT_REPOSITORY_PROVIDER` | Provider de checkpoints LangGraph. | | `USAGE_REPOSITORY_PROVIDER` | Provider para gravação de uso/tokens/custo. | | `TIM_STATE_BACKEND` | Backend legado de estado mantido por compatibilidade. | ### Autonomous DB / Oracle Store | Parâmetro | Para que serve | |---|---| | `ADB_USER` | Usuário do Autonomous Database para persistência/RAG. | | `ADB_PASSWORD` | Senha do Autonomous Database. Valor sensível; não commitar. | | `ADB_DSN` | DSN/connect string do Autonomous Database. | | `ADB_WALLET_LOCATION` | Diretório do wallet ADB, quando aplicável. | | `ADB_WALLET_PASSWORD` | Senha do wallet ADB. Valor sensível; não commitar. | | `ADB_TABLE_PREFIX` | Prefixo das tabelas criadas/usadas pelo framework. | | `TIM_DB_TNS_NAME` | Configuração de banco Oracle/ADB legada TIM mantida para compatibilidade. | | `TIM_DB_CONNECT_STRING` | Configuração de banco Oracle/ADB legada TIM mantida para compatibilidade. | | `TIM_DB_USER` | Configuração de banco Oracle/ADB legada TIM mantida para compatibilidade. | | `TIM_DB_PASSWORD` | Configuração de banco Oracle/ADB legada TIM mantida para compatibilidade. | | `TIM_DB_WALLET_PASSWORD` | Configuração de banco Oracle/ADB legada TIM mantida para compatibilidade. | | `TIM_DB_USE_WALLET` | Configuração de banco Oracle/ADB legada TIM mantida para compatibilidade. | ### RAG / Vector Store do framework | Parâmetro | Para que serve | |---|---| | `VECTOR_STORE_PROVIDER` | Provider do vector store/RAG, como memory ou autonomous. | | `GRAPH_STORE_PROVIDER` | Provider do graph store, quando habilitado. | | `RAG_TOP_K` | Quantidade máxima de documentos/chunks recuperados por consulta RAG. | | `EMBEDDING_PROVIDER` | Provider de embeddings, como mock ou oci. | | `OCI_EMBEDDING_MODEL` | Modelo OCI de embedding usado para indexação/consulta. | | `RAG_FILE_GLOBS` | Extensões/padrões de arquivos aceitos na ingestão RAG. | | `TIM_RAG_ENABLED` | Liga/desliga compatibilidade RAG do legado TIM. | | `TIM_RAG_OCI_SERVICE_ENDPOINT` | Configuração RAG legada TIM mantida para compatibilidade com adapters/scripts. | | `TIM_RAG_DB_USER` | Configuração RAG legada TIM mantida para compatibilidade com adapters/scripts. | | `TIM_RAG_DB_PASSWORD` | Configuração RAG legada TIM mantida para compatibilidade com adapters/scripts. | | `TIM_RAG_DB_DSN` | Configuração RAG legada TIM mantida para compatibilidade com adapters/scripts. | ### Langfuse / observabilidade | Parâmetro | Para que serve | |---|---| | `ENABLE_LANGFUSE` | Liga/desliga envio de traces para Langfuse. | | `LANGFUSE_PUBLIC_KEY` | Chave pública Langfuse. Valor sensível operacional. | | `LANGFUSE_SECRET_KEY` | Chave secreta Langfuse. Valor sensível; não commitar. | | `LANGFUSE_HOST` | URL do servidor Langfuse. | | `ENABLE_OTEL` | Liga/desliga exportação OpenTelemetry. | | `TIM_LLM_GATEWAY_LANGFUSE_PUBLIC_KEY` | Configuração legada Langfuse do LLM Gateway (public_key). | | `TIM_LLM_GATEWAY_LANGFUSE_SECRET_KEY` | Configuração legada Langfuse do LLM Gateway (secret_key). | | `TIM_LLM_GATEWAY_LANGFUSE_HOST` | Configuração legada Langfuse do LLM Gateway (host). | | `TIM_LLM_GATEWAY_LANGFUSE_DEFAULT_LABEL` | Configuração legada Langfuse do LLM Gateway (default_label). | | `TIM_LLM_GATEWAY_LANGFUSE_CACHE_TTL_SECONDS` | Configuração legada Langfuse do LLM Gateway (cache_ttl_seconds). | | `TIM_LLM_GATEWAY_LANGFUSE_MAX_RETRIES` | Configuração legada Langfuse do LLM Gateway (max_retries). | | `TIM_LLM_GATEWAY_LANGFUSE_FETCH_TIMEOUT_SECONDS` | Configuração legada Langfuse do LLM Gateway (fetch_timeout_seconds). | | `TIM_LLM_GATEWAY_LANGFUSE_MASK_SENSITIVE_DATA` | Configuração legada Langfuse do LLM Gateway (mask_sensitive_data). | | `TIM_AGENT_FRAMEWORK_LOG_EXPORT_ENABLED` | Parâmetro de compatibilidade do projeto; revisar uso específico no código/configuração antes de remover. | | `ENABLE_ANALYTICS` | Liga/desliga publisher analítico do framework. | | `ANALYTICS_PROVIDERS` | Lista/provider de analytics, por exemplo noop ou oci_streaming. | | `ENABLE_OCI_STREAMING` | Liga/desliga integração com OCI Streaming. | ### Guardrails / Supervisor / Judges do framework | Parâmetro | Para que serve | |---|---| | `ENABLE_INPUT_GUARDRAILS` | Ativa guardrails de entrada antes do roteamento/agente. | | `ENABLE_OUTPUT_GUARDRAILS` | Ativa guardrails de saída depois da resposta do agente. | | `ENABLE_JUDGES` | Ativa judges pós-resposta. | | `ENABLE_SUPERVISOR` | Ativa supervisor/validação de fluxo do framework. | | `ENABLE_OUTPUT_SUPERVISOR` | Ativa revisão/retry da resposta antes da entrega. | | `ENABLE_PARALLEL_GUARDRAILS` | Executa guardrails em paralelo quando suportado. | | `GUARDRAILS_FAIL_FAST` | Interrompe no primeiro guardrail bloqueante. | | `OUTPUT_SUPERVISOR_MAX_RETRIES` | Número máximo de tentativas de correção do Output Supervisor. | | `GUARDRAILS_CONFIG_PATH` | Caminho do YAML de guardrails. | | `JUDGES_CONFIG_PATH` | Caminho do YAML de judges. | | `PROMPT_POLICY_PATH` | Caminho da política de prompt. | | `USE_MOCK_LLM` | Força LLM mock para teste local sem provider real. | | `GUARDRAIL_LLM` | Perfil/modelo usado pelos guardrails LLM. | ### Channel / Routing / MCP framework | Parâmetro | Para que serve | |---|---| | `DEFAULT_CHANNEL` | Canal padrão quando não informado na request. | | `FRAMEWORK_CHANNEL_INPUT_MODE` | Modo do Channel Gateway: embedded ou external. | | `ENABLE_VOICE_ADAPTER` | Habilita adapter de voz. | | `ENABLE_WHATSAPP_ADAPTER` | Habilita adapter WhatsApp. | | `ENABLE_TEXT_ADAPTER` | Habilita adapter texto/web. | | `ROUTING_CONFIG_PATH` | Caminho do YAML de roteamento/intents. | | `ENABLE_LLM_ROUTER` | Liga router por LLM além das regras/YAML. | | `ROUTING_MODE` | Modo de roteamento do framework. | | `ENABLE_MCP_TOOLS` | Liga/desliga execução de tools MCP. | | `MCP_SERVERS_CONFIG_PATH` | Caminho do YAML com servidores MCP. | | `TOOLS_CONFIG_PATH` | Caminho do catálogo de tools MCP. | | `MCP_PARAMETER_MAPPING_PATH` | Caminho do mapeamento BusinessContext -> argumentos das tools. | | `MCP_TOOL_TIMEOUT_SECONDS` | Timeout padrão das chamadas MCP. | | `IDENTITY_CONFIG_PATH` | Caminho do YAML do IdentityResolver. | | `ENABLE_REDIS_CACHE` | Liga Redis para cache distribuído. | | `REDIS_URL` | URL de conexão Redis. | | `ENABLE_CONVERSATION_SUMMARY_MEMORY` | Liga memória sumarizada de conversa. | | `MEMORY_CONTEXT_STRATEGY` | Estratégia de contexto de memória, por exemplo summary. | | `MEMORY_HISTORY_LIMIT` | Limite de mensagens mantidas no histórico. | | `MEMORY_RECENT_MESSAGES_LIMIT` | Quantidade de mensagens recentes injetadas no prompt. | | `MEMORY_SUMMARY_TRIGGER_MESSAGES` | Número de mensagens que dispara sumarização. | | `MEMORY_MAX_SUMMARY_CHARS` | Tamanho máximo do resumo de memória. | | `MEMORY_SUMMARY_USE_LLM` | Usa LLM para gerar resumo de memória. | | `MEMORY_INJECT_RECENT_MESSAGES` | Injeta mensagens recentes no contexto do agente. | | `MEMORY_INJECT_SUMMARY` | Injeta resumo da conversa no contexto do agente. | ### MCP legacy TIM/FIRST - integração real por padrão | Parâmetro | Para que serve | |---|---| | `TIM_MCP_USE_MOCK` | Liga mock interno do MCP. Se false, MCP chama endpoints externos configurados. | | `TIM_MCP_TIMEOUT_SECONDS` | Timeout padrão do MCP legado. | | `TIM_GATEWAY_RETRY_MAX_RETRIES` | Número máximo de retries nas chamadas externas TIM. | | `TIM_GATEWAY_RETRY_BACKOFF_FACTOR` | Fator de backoff entre retries. | | `TIM_GATEWAY_DEFAULT_TIMEOUT` | Timeout padrão do gateway HTTP externo. | | `TIM_DEFAULT_AUTH` | Authorization default para endpoints TIM quando não há auth específico. | | `TIM_CLIENT_ID` | Client ID padrão enviado às APIs TIM/FIRST. | | `TIM_USER_ID` | Usuário técnico/default enviado em payloads/headers. | | `TIM_DEFAULT_CLIENT_ID` | Client ID fallback para chamadas externas. | | `TIM_DEFAULT_CSP_ID` | CSP ID padrão para VAS/serviços. | | `TIM_DEFAULT_CHANNEL` | Canal default moderno para APIs TIM. | | `TIM_DEFAULT_CHANNEL_LEGACY` | Canal default compatível com legado. | | `TIM_AUTHORIZATION_OAM` | Token/header OAM quando a API exigir. | | `TIM_CN_FIELD` | Campo CN legado opcional para headers/payloads. | | `TIM_TYPE_FIELD` | Campo type legado opcional para headers/payloads. | ### Consulta VAS | Parâmetro | Para que serve | |---|---| | `TIM_QUERY_VAS_URL` | URL do endpoint externo para query vas. | | `TIM_QUERY_VAS_AUTH` | Header Authorization específico para query vas. Valor sensível. | | `TIM_QUERY_VAS_TIMEOUT` | Timeout em segundos para query vas. | | `TIM_URL_CONSULTA_VAS` | Alias legado de URL para endpoint TIM; mantido para compatibilidade com nomes antigos. | | `TIM_CONSULTA_AUTH` | Header Authorization específico para consulta. Valor sensível. | | `TIM_CONSULTA_TIMEOUT` | Timeout em segundos para consulta. | ### Bloqueio VAS | Parâmetro | Para que serve | |---|---| | `TIM_BLOCK_VAS_URL` | URL do endpoint externo para block vas. | | `TIM_BLOCK_VAS_AUTH` | Header Authorization específico para block vas. Valor sensível. | | `TIM_BLOCK_VAS_TIMEOUT` | Timeout em segundos para block vas. | | `TIM_BLOCK_VAS_CLIENT_ID` | Client ID específico usado em block vas. | | `TIM_BLOCK_VAS_OPERATION_TYPE` | Tipo de operação enviado para block vas. | | `TIM_BLOCK_VAS_PAYLOAD_MODE` | Modo de montagem do payload para block vas. | | `TIM_BLOCK_VAS_ACCEPT_ENCODING` | Header Accept-Encoding usado em block vas. | | `TIM_URL_BLOQUEIO_VAS` | Alias legado de URL para endpoint TIM; mantido para compatibilidade com nomes antigos. | | `TIM_BLOQUEIO_AUTH` | Header Authorization específico para bloqueio. Valor sensível. | | `TIM_BLOQUEIO_TIMEOUT` | Timeout em segundos para bloqueio. | | `TIM_BLOQUEIO_OPERATION_TYPE` | Tipo de operação enviado para bloqueio. | | `TIM_BLOQUEIO_ACCEPT_ENCODING` | Header Accept-Encoding usado em bloqueio. | ### Cancelamento VAS | Parâmetro | Para que serve | |---|---| | `TIM_CANCEL_VAS_URL` | URL do endpoint externo para cancel vas. | | `TIM_CANCEL_VAS_AUTH` | Header Authorization específico para cancel vas. Valor sensível. | | `TIM_CANCEL_VAS_TIMEOUT` | Timeout em segundos para cancel vas. | | `TIM_CANCEL_VAS_CLIENT_ID` | Client ID específico usado em cancel vas. | | `TIM_CANCELAMENTO_URL` | URL do endpoint externo para cancelamento. | | `TIM_CANCELAMENTO_AUTH` | Header Authorization específico para cancelamento. Valor sensível. | | `TIM_CANCELAMENTO_TIMEOUT` | Timeout em segundos para cancelamento. | ### Contrato | Parâmetro | Para que serve | |---|---| | `TIM_CONTRATO_URL` | URL do endpoint externo para contrato. | | `TIM_CONTRATO_AUTH` | Header Authorization específico para contrato. Valor sensível. | | `TIM_CONTRATO_TIMEOUT` | Timeout em segundos para contrato. | ### Complete invoices / fatura completa | Parâmetro | Para que serve | |---|---| | `TIM_COMPLETE_INVOICES_URL` | URL do endpoint externo para complete invoices. | | `TIM_COMPLETE_INVOICES_AUTH` | Header Authorization específico para complete invoices. Valor sensível. | | `TIM_COMPLETE_INVOICES_TIMEOUT` | Timeout em segundos para complete invoices. | | `TIM_COMPLETE_INVOICES_CLIENT_ID` | Client ID específico usado em complete invoices. | ### Perfil de fatura | Parâmetro | Para que serve | |---|---| | `TIM_PROFILE_BILL_URL` | URL do endpoint externo para profile bill. | | `TIM_PROFILE_BILL_AUTH` | Header Authorization específico para profile bill. Valor sensível. | | `TIM_PROFILE_BILL_TIMEOUT` | Timeout em segundos para profile bill. | | `TIM_URL_PERFIL_FATURA` | Alias legado de URL para endpoint TIM; mantido para compatibilidade com nomes antigos. | | `TIM_PROFILE_FULL_URL` | URL do endpoint externo para profile full. | ### Divergência / billing analysis | Parâmetro | Para que serve | |---|---| | `TIM_DIVERGENCIA_URL` | URL do endpoint externo para divergencia. | | `TIM_DIVERGENCIA_AUTH` | Header Authorization específico para divergencia. Valor sensível. | | `TIM_INVOICE_EXPLANATION_URL` | URL do endpoint externo para invoice explanation. | | `TIM_INVOICE_EXPLANATION_AUTH` | Header Authorization específico para invoice explanation. Valor sensível. | ### Bill/PDF / invoice recover | Parâmetro | Para que serve | |---|---| | `TIM_BILL_PDF_URL` | URL do endpoint externo para bill pdf. | | `TIM_BILL_PDF_AUTH` | Header Authorization específico para bill pdf. Valor sensível. | | `TIM_BILL_PDF_TIMEOUT` | Timeout em segundos para bill pdf. | | `TIM_BILL_PDF_CLIENT_ID` | Client ID específico usado em bill pdf. | | `TIM_URL_INVOICE_RECOVER` | Alias legado de URL para endpoint TIM; mantido para compatibilidade com nomes antigos. | | `TIM_INVOICE_RECOVER_AUTH` | Header Authorization específico para invoice recover. Valor sensível. | | `TIM_INVOICE_RECOVER_TIMEOUT` | Timeout em segundos para invoice recover. | | `TIM_INVOICE_RECOVER_CLIENT_ID` | Client ID específico usado em invoice recover. | ### Protocolo / backOfficeSRopening | Parâmetro | Para que serve | |---|---| | `TIM_PROTOCOL_URL` | URL do endpoint externo para protocol. | | `TIM_PROTOCOL_AUTH` | Header Authorization específico para protocol. Valor sensível. | | `TIM_PROTOCOL_TIMEOUT` | Timeout em segundos para protocol. | ### Contestação/SR | Parâmetro | Para que serve | |---|---| | `TIM_CUSTOMER_CONTESTATION_URL` | URL do endpoint externo para customer contestation. | | `TIM_CUSTOMER_CONTESTATION_AUTH` | Header Authorization específico para customer contestation. Valor sensível. | | `TIM_CUSTOMER_CONTESTATION_TIMEOUT` | Timeout em segundos para customer contestation. | | `TIM_CUSTOMER_CONTESTATION_CLIENT_ID` | Client ID específico usado em customer contestation. | | `TIM_CUSTOMER_CONTESTATION_USER_ID` | Usuário técnico específico usado em customer contestation. | ### Status SR | Parâmetro | Para que serve | |---|---| | `TIM_SERVICE_REQUEST_STATUS_URL` | URL do endpoint externo para service request status. | | `TIM_SERVICE_REQUEST_STATUS_AUTH` | Header Authorization específico para service request status. Valor sensível. | | `TIM_SERVICE_REQUEST_STATUS_TIMEOUT` | Timeout em segundos para service request status. | ### SMS | Parâmetro | Para que serve | |---|---| | `TIM_SMS_URL` | URL do endpoint externo para sms. | | `TIM_SMS_AUTH` | Header Authorization específico para sms. Valor sensível. | | `TIM_SMS_TIMEOUT` | Timeout em segundos para sms. | | `TIM_SMS_CLIENT_ID` | Client ID específico usado em sms. | | `TIM_SMS_SENDER_ADDRESS` | Endereço/remetente usado no envio de SMS. | | `TIM_SMS_SENDER_NAME` | Nome do remetente usado no envio de SMS. | | `TIM_SMS_TOKEN_URL` | Configuração para obtenção de token OAuth/serviço do envio de SMS. | | `TIM_SMS_TOKEN_CLIENT_ID` | Configuração para obtenção de token OAuth/serviço do envio de SMS. | | `TIM_SMS_TOKEN_CLIENT_SECRET` | Configuração para obtenção de token OAuth/serviço do envio de SMS. | | `TIM_SMS_TOKEN_SCOPE` | Configuração para obtenção de token OAuth/serviço do envio de SMS. | | `TIM_SMS_TOKEN_AUDIENCE` | Configuração para obtenção de token OAuth/serviço do envio de SMS. | | `TIM_SMS_TOKEN_TIMEOUT` | Configuração para obtenção de token OAuth/serviço do envio de SMS. | | `SMS_BARCODE_AUTH` | Authorization alternativo para envio de SMS com código de barras. | ### Tracking activities | Parâmetro | Para que serve | |---|---| | `TIM_TRACKING_ACTIVITIES_URL` | URL do endpoint externo para tracking activities. | | `TIM_TRACKING_ACTIVITIES_AUTH` | Header Authorization específico para tracking activities. Valor sensível. | | `TIM_TRACKING_ACTIVITIES_TIMEOUT` | Timeout em segundos para tracking activities. | | `TIM_TRACKING_ACTIVITIES_USER_LOGIN` | Login técnico usado em tracking activities. | | `TIM_TRACKING_ACTIVITIES_CHANNEL` | Canal enviado nas chamadas de tracking activities. | | `TIM_TRACKING_ACTIVITIES_CLIENT_ID` | Client ID específico usado em tracking activities. | ### Legacy app / workflows | Parâmetro | Para que serve | |---|---| | `TIM_WORKFLOWS_DIR` | Diretório de workflows legados mantido como referência. | | `TIM_WORKFLOW_POSTGRES_DSN` | DSN Postgres legado, se algum workflow antigo exigir. | | `TIM_APP_HOST` | Host legado da aplicação TIM. | | `TIM_APP_PORT` | Porta legada da aplicação TIM. | | `TIM_APP_RELOAD` | Reload legado do app TIM. | | `TIM_APP_LOG_LEVEL` | Log level legado do app TIM. | ### LLM Gateway legado | Parâmetro | Para que serve | |---|---| | `TIM_LLM_GATEWAY_SOURCES` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_GATEWAY_LOCAL_DIR` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_GATEWAY_CAPABILITIES_DIR` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_GATEWAY_LANGGRAPH_URL` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_GATEWAY_LANGGRAPH_TIMEOUT` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_GATEWAY_FALLBACK_PROMPT_ID` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | | `TIM_LLM_GATEWAY_FALLBACK_PROMPT_CONTENT` | Configuração legada do LLM Gateway TIM mantida para compatibilidade. | ### Pub/Sub / export legado | Parâmetro | Para que serve | |---|---| | `GCP_PROJECT_ID` | Projeto GCP legado usado em Pub/Sub/exportações. | | `AGENT_PUBSUB_TOPIC` | Tópico Pub/Sub legado para curadoria/ingestão. | | `TIM_PUBSUB_DIRECT_ENABLED` | Liga publicação direta no Pub/Sub legado. | | `GOOGLE_APPLICATION_CREDENTIALS` | Caminho do arquivo de credenciais GCP. | ### Mock legado explicitamente desligado | Parâmetro | Para que serve | |---|---| | `TIM_MOCK_LATENCY_MS` | Latência artificial do mock legado. | | `TIM_MOCK_FAILURES` | Lista/configuração de falhas simuladas no mock legado. | | `TIM_MOCK_FIXTURES_DIR` | Diretório de fixtures do mock legado. | ## Recomendações de operação 1. Para teste local completo, prefira `TIM_MCP_USE_MOCK=false` com URLs apontando para `http://localhost:8001`, pois assim você valida backend, MCP e mock externo no mesmo fluxo. 2. Para smoke test rápido apenas do MCP, use `TIM_MCP_USE_MOCK=true` no MCP e dispense o mock server. 3. Para produção/homologação, substitua URLs do mock pelas APIs reais TIM/FIRST e revise todos os parâmetros `*_AUTH`, `*_CLIENT_ID`, timeouts e retry. 4. Não deixe `USE_MOCK_LLM=true` em ambiente que precise validar chamada real ao LLM. 5. Se `VECTOR_STORE_PROVIDER=autonomous`, valide `ADB_*`, `EMBEDDING_PROVIDER=oci` e `OCI_EMBEDDING_MODEL` antes de testar RAG. 6. Se `ENABLE_LANGFUSE=true`, confirme `LANGFUSE_HOST`, `LANGFUSE_PUBLIC_KEY` e `LANGFUSE_SECRET_KEY` antes de esperar traces. 7. Reinicie MCP e backend sempre que alterar `.env`, `config/tools.yaml`, `config/mcp_servers.yaml` ou `config/mcp_parameter_mapping.yaml`. ## Troubleshooting rápido | Sintoma | Causa provável | Ação | |---|---|---| | `Endpoint externo não configurado para TIM_COMPLETE_INVOICES` | URL da API externa não preenchida no `.env` do MCP. | Configure `TIM_COMPLETE_INVOICES_URL` ou use `TIM_MCP_USE_MOCK=true`. | | Backend não chama MCP | `ENABLE_MCP_TOOLS=false`, `MCP_SERVERS_CONFIG_PATH` errado ou MCP fora do ar. | Verifique `/debug/mcp/call/consultar_fatura` e `http://localhost:8100/health`. | | Frontend recebe erro CORS | Origem não está em `CORS_ORIGINS`. | Inclua `http://localhost:5173` no `.env`. | | Não aparecem traces no Langfuse | Langfuse desabilitado ou chaves/host incorretos. | Verifique `ENABLE_LANGFUSE`, `LANGFUSE_HOST`, `LANGFUSE_PUBLIC_KEY`, `LANGFUSE_SECRET_KEY`. | | RAG não retorna documentos | Vector store/embedding não configurados ou base não ingerida. | Teste `VECTOR_STORE_PROVIDER=memory`/`EMBEDDING_PROVIDER=mock` ou configure ADB/OCI. | | Tool retorna `ok=false` sem erro | MCP antigo/rota errada ou backend não reiniciado. | Reinicie MCP e backend; confira `config/mcp_servers.yaml`. | ## Resumo executivo Este projeto coloca o Agent Contas FIRST sobre o Agent Framework OCI com uma arquitetura mais limpa: o framework cuida das capacidades transversais corporativas e o código do Contas fica restrito ao domínio de negócio. A integração operacional passa por MCP, com mapeamento canônico de identidade, cache declarativo, RAG nativo, guardrails, judges e observabilidade. Para subir localmente o fluxo completo, use quatro terminais: MCP na porta `8100`, mock externo na porta `8001`, backend na porta `8000` e frontend na porta `5173`.