MCP (Model Context Protocol)
O MCP permite integrar um LLM (no lado do hospital) diretamente com as ferramentas da SauBit via um único endpoint padronizado. Em vez de o cliente implementar chamadas REST manualmente, ele conecta no MCP Server e o LLM passa a chamar tools como saubit.interactions_check.
Endpoint
- URL:
https://api.saubit.com.br/mcp - Autenticação: header
X-API-Key
Configuração (copiar e colar)
Exemplo de configuração de MCP client (formato comum em ferramentas de IDE/agents):
{
"mcpServers": {
"saubit": {
"type": "http",
"url": "https://api.saubit.com.br/mcp",
"headers": {
"X-API-Key": "SUA_API_KEY"
},
"metadata": {
"name": "saubit-mcp",
"description": "MCP server da SauBit para ferramentas clínicas (interações, chat, análises, billing/usage)."
}
}
}
}
Segurança
- Use sempre uma API key por organização.
- Se sua API key estiver com whitelist de IP ativa, o MCP também respeita essa regra.
- Para uso em browser, o servidor aplica CORS com base em
MCP_ALLOWED_ORIGINSe validaOriginquando presente. - O tool
saubit.interactions_checkexige scopeinteractions:check. - O tool
saubit.chat_messagetambem depende deinteractions:check. - Os tools
saubit.analyses_listesaubit.analyses_getexigemanalyses:read. - Os tools
saubit.usage_summaryesaubit.billing_summaryexigemusage:readebilling:read.
CORS (browser)
- Se seu painel roda em
http://localhost:3000, inclua esse origin emMCP_ALLOWED_ORIGINS. - Exemplo:
MCP_ALLOWED_ORIGINS=http://localhost:3000,https://seu-dominio.com
Tools disponíveis
saubit.interactions_checksaubit.chat_messagesaubit.analyses_listsaubit.analyses_getsaubit.usage_summarysaubit.billing_summary
Notas importantes
saubit.chat_messageaceitaanalysis_idopcional (mesmo comportamento do REST), para que o chat use a análise como contexto e filtre menções a fontes não verificadas.saubit.analyses_getretornaresponse_body(sem ecoarpatient_record/request completo) para reduzir risco de exposição de dados.- O retorno de
saubit.interactions_checkusa o mesmo contrato do REST, incluindoanalysis_status,source_coverageeunverified_pairs.
Exemplo (JSON-RPC)
Listar tools
curl -X POST "https://api.saubit.com.br/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: <SUA_API_KEY>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
Executar análise de interações
curl -X POST "https://api.saubit.com.br/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: <SUA_API_KEY>" \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"tools/call",
"params":{
"name":"saubit.interactions_check",
"arguments":{
"medications":[{"name":"AAS","dose_mg":100},{"name":"Cetorolaco","dose_mg":10}],
"patient_record":{"conditions":["hipertensao"],"current_medications":[]}
}
}
}'
Exemplo de MCP Client (Node.js)
Este exemplo usa o transport HTTP do MCP e injeta X-API-Key em todas as chamadas.
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(new URL("https://api.saubit.com.br/mcp"), {
headers: {
"X-API-Key": process.env.SAUBIT_API_KEY!,
},
});
const client = new Client({ name: "hospital-client", version: "1.0.0" }, { capabilities: {} });
await client.connect(transport);
const tools = await client.listTools();
console.log(tools);
const resp = await client.callTool({
name: "saubit.interactions_check",
arguments: {
medications: [{ name: "AAS", dose_mg: 100 }, { name: "Cetorolaco", dose_mg: 10 }],
patient_record: { conditions: ["hipertensao"], current_medications: [] },
},
});
console.log(resp);
O que o MCP traz
- Uma integração padronizada de tools (o LLM chama ferramentas, não endpoints).
- Menos boilerplate no cliente (hospital).
- Mesma autenticação (
X-API-Key), rate limit e controle de uso já existentes na SauBit.