# API da OpenAI e API da Anthropic

Use o MCP como ferramenta remota no seu código: Responses da OpenAI e Messages da Anthropic.

Guia Python · TypeScript Chave secreta

**Antes de começar.** As duas APIs chamam o MCP a partir dos servidores do provedor, então o servidor precisa ser público (é) e sua chave viaja em cada requisição: crie-a só com permissões de leitura e guarde em uma variável de ambiente do backend. As secretas de leitura vêm com Business e Enterprise.

## API da OpenAI (Responses)

Uma ferramenta do tipo mcp com server_url e a chave em headers. allowed_tools limita quais ferramentas o modelo vê; com require_approval "never" não é preciso aprovar cada chamada (todas são de leitura). A resposta traz um mcp_list_tools com as ferramentas e um mcp_call por consulta.

Python:

```python
import os
from openai import OpenAI

client = OpenAI()
resp = client.responses.create(
    model="gpt-6-astra",
    tools=[{
        "type": "mcp",
        "server_label": "bydomu",
        "server_description": "CRM inmobiliario ByDomu, solo lectura",
        "server_url": "https://mcp.bydomu.com/mcp",
        "headers": {"Authorization": "Bearer " + os.environ["BYDOMU_API_KEY"]},
        "allowed_tools": ["search_properties", "get_property", "list_appointments"],
        "require_approval": "never",  # las 9 herramientas son de solo lectura
    }],
    input="¿Qué apartamentos en arriendo tengo en Medellín por menos de 4 millones?",
)
print(resp.output_text)
```

JavaScript:

```js
import OpenAI from "openai";

const client = new OpenAI();
const resp = await client.responses.create({
  model: "gpt-6-astra",
  tools: [{
    type: "mcp",
    server_label: "bydomu",
    server_url: "https://mcp.bydomu.com/mcp",
    headers: { Authorization: `Bearer ${process.env.BYDOMU_API_KEY}` },
    require_approval: "never",
  }],
  input: "Dame un resumen de la inmobiliaria.",
});
console.log(resp.output_text);
```

Se preferir aprovar à mão, use require_approval "always": chega um mcp_approval_request e você responde com um mcp_approval_response na próxima requisição (com previous_response_id). O campo authorization é para tokens OAuth; para a chave do ByDomu use headers. O modelo é o dos exemplos da OpenAI: use o que preferir.

## API da Anthropic (Messages)

O conector MCP do Messages precisa de duas partes e do cabeçalho beta mcp-client-2025-11-20: o servidor em mcp_servers (a chave vai em authorization_token e é enviada como Authorization: Bearer) e um mcp_toolset em tools que o nomeie. A resposta traz blocos mcp_tool_use e mcp_tool_result.

Python:

```python
import os
import anthropic

client = anthropic.Anthropic()
response = client.beta.messages.create(
    model="claude-opus-5",
    max_tokens=16000,
    betas=["mcp-client-2025-11-20"],
    mcp_servers=[{
        "type": "url",
        "url": "https://mcp.bydomu.com/mcp",
        "name": "bydomu",
        "authorization_token": os.environ["BYDOMU_API_KEY"],
    }],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "bydomu"}],
    messages=[{"role": "user", "content": "¿Qué citas tengo mañana?"}],
)
for block in response.content:
    if block.type == "text":
        print(block.text)
```

TypeScript:

```ts
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();
const response = await client.beta.messages.create({
  model: "claude-opus-5",
  max_tokens: 16000,
  betas: ["mcp-client-2025-11-20"],
  mcp_servers: [{
    type: "url",
    url: "https://mcp.bydomu.com/mcp",
    name: "bydomu",
    authorization_token: process.env.BYDOMU_API_KEY,
  }],
  tools: [{ type: "mcp_toolset", mcp_server_name: "bydomu" }],
  messages: [{ role: "user", content: "¿Qué negocios están en negociación?" }],
});
for (const block of response.content) {
  if (block.type === "text") console.log(block.text);
}
```

Para deixar só algumas ferramentas, use default_config e configs dentro do mcp_toolset. O conector funciona na API do Claude, não no Amazon Bedrock nem no Google Vertex AI.

## O que considerar

- Os dados que o ByDomu devolve passam pelo provedor do modelo: confira as condições de retenção antes de enviar dados de clientes.
- Cada consulta do modelo conta no limite da chave (60 por minuto); get_summary faz várias leituras de uma vez.
- Se você precisa escrever (criar um contato, mover um negócio), o MCP não faz: defina sua própria ferramenta que chame a API REST ( `https://api.bydomu.com/v1`) com uma chave aprovada para isso e Idempotency-Key.

## O que pode fazer, como revogar e boas práticas

O servidor é somente leitura: a IA pode consultar, mas não cria, muda nem apaga nada, e nunca envia mensagens aos seus clientes. Ela só vê o que estas permissões permitem, com o limite de uma chave secreta (60 requisições por minuto).

Pode Permissão

Buscar e ver imóveis publicados `portal:read`

Buscar e ver contatos `contacts:read`

Agenda e compromissos `appointments:read`

Ler as mensagens de um contato `conversations:read`

Funis e negócios `deals:read`

Tarefas pendentes `tasks:read`

Com uma chave, a IA vê o que essa chave permitir. Para cortar o acesso, pause ou apague a chave em Configurações › API Keys; a próxima chamada responde 401.

- Uma chave por integração, só com as permissões de leitura que usa. Deixe conversations:read de fora se não precisa das mensagens.
- A chave vai em uma variável de ambiente ou no cofre de segredos do cliente, nunca colada num chat, num arquivo do repositório nem numa URL.
- O que o ByDomu devolve inclui texto escrito pelos seus clientes: trate como dados, não como instruções. Não encadeie este conector com ferramentas que enviam e-mails ou mensagens sem aprovação de uma pessoa.
- Revise de vez em quando os Apps conectados e remova o que não se usa mais.
