MCP Server
O Portal disponibiliza um servidor MCP (Model Context Protocol) completo que permite que LLMs e agentes de IA controlem dispositivos, automacoes, scripts, dashboards e muito mais — tudo usando linguagem natural.
O que e o MCP?
O Model Context Protocol (MCP) e um protocolo aberto que padroniza como aplicacoes de IA se conectam a fontes de dados e ferramentas externas. O Portal implementa um MCP Server com Streamable HTTP transport, expondo mais de 55 ferramentas que cobrem todas as funcionalidades da plataforma.
Com isso, voce pode usar assistentes como Claude Code CLI, Gemini CLI ou qualquer agente compativel com MCP para controlar sua casa inteligente por texto.
Endpoint
https://portal.unicontrol.me/v1/mcp
O transporte utilizado e Streamable HTTP — o padrao recomendado pelo MCP para servidores remotos.
Autenticacao
O MCP Server utiliza OAuth 2.1 via Logto. A autenticacao e automatica: ao conectar um cliente MCP pela primeira vez, o fluxo OAuth sera iniciado no navegador para autorizar o acesso.
Nao e necessario configurar tokens manualmente — o protocolo MCP OAuth cuida de tudo.
Ferramentas Disponiveis
O servidor expoe as seguintes ferramentas, organizadas por dominio:
Dispositivos e Entidades
| Ferramenta | Descricao |
|---|
list_devices | Listar todos os dispositivos |
get_device | Obter detalhes de um dispositivo |
list_entities | Listar todas as entidades |
get_entity_state | Obter estado de uma entidade |
get_all_states | Obter estados de todas as entidades |
call_service | Chamar um servico (light, switch, cover, climate, fan, media_player, etc.) |
Automacoes
| Ferramenta | Descricao |
|---|
list_automations | Listar todas as automacoes |
get_automation | Obter detalhes de uma automacao |
create_automation | Criar uma nova automacao |
update_automation | Atualizar uma automacao existente |
delete_automation | Excluir uma automacao |
toggle_automation | Ativar/desativar uma automacao |
trigger_automation | Executar uma automacao manualmente |
Scripts
| Ferramenta | Descricao |
|---|
list_scripts | Listar todos os scripts |
get_script | Obter detalhes de um script |
create_script | Criar um novo script |
update_script | Atualizar um script existente |
delete_script | Excluir um script |
trigger_script | Executar um script |
| Ferramenta | Descricao |
|---|
list_tags | Listar todas as tags |
create_tag | Criar uma nova tag |
update_tag | Atualizar uma tag |
delete_tag | Excluir uma tag |
simulate_tag_scan | Simular a leitura de uma tag |
Dashboards
| Ferramenta | Descricao |
|---|
list_dashboards | Listar todos os dashboards |
get_dashboard | Obter detalhes de um dashboard |
create_dashboard | Criar um novo dashboard |
update_dashboard | Atualizar um dashboard |
delete_dashboard | Excluir um dashboard |
add_card_to_dashboard | Adicionar um card a um dashboard |
Transferencias
| Ferramenta | Descricao |
|---|
list_transfers | Listar transferencias |
create_transfer | Criar uma transferencia de recurso |
accept_transfer | Aceitar uma transferencia |
reject_transfer | Rejeitar uma transferencia |
cancel_transfer | Cancelar uma transferencia |
Organizacoes
| Ferramenta | Descricao |
|---|
list_my_organizations | Listar suas organizacoes |
get_organization_members | Listar membros de uma organizacao |
create_organization | Criar uma organizacao |
invite_to_organization | Convidar membro para organizacao |
list_pending_invitations | Listar convites pendentes |
accept_organization_invitation | Aceitar convite de organizacao |
decline_organization_invitation | Recusar convite de organizacao |
get_org_permissions | Obter permissoes da organizacao |
set_org_permissions | Definir permissoes da organizacao |
list_org_shares | Listar compartilhamentos da organizacao |
share_resource_with_org | Compartilhar recurso com organizacao |
Suporte
| Ferramenta | Descricao |
|---|
list_support_tickets | Listar tickets de suporte |
get_support_ticket | Obter detalhes de um ticket |
create_support_ticket | Criar um ticket de suporte |
reply_support_ticket | Responder a um ticket |
upload_support_attachment | Enviar anexo em um ticket |
Agendamento
| Ferramenta | Descricao |
|---|
list_scheduling_event_types | Listar tipos de evento disponiveis |
get_available_scheduling_times | Obter horarios disponiveis |
create_scheduling_link | Criar link de agendamento |
list_scheduling_appointments | Listar agendamentos |
cancel_scheduling_appointment | Cancelar um agendamento |
Conectando o Claude Code CLI
Adicionar o servidor MCP
Execute no terminal:claude mcp add portal --transport streamable-http https://portal.unicontrol.me/v1/mcp
Autorizar o acesso
Na primeira vez que voce usar uma ferramenta do Portal, o Claude Code abrira automaticamente o navegador para voce fazer login e autorizar o acesso via OAuth.
Comecar a usar
Agora voce pode pedir ao Claude para controlar seus dispositivos diretamente:> Apague todas as luzes da sala
> Crie uma automação que ligue o ar-condicionado às 18h
> Qual o estado do sensor de temperatura do quarto?
Conectando o Gemini CLI
Editar o arquivo de configuracao
Adicione ao arquivo ~/.gemini/settings.json:{
"mcpServers": {
"portal": {
"httpUrl": "https://portal.unicontrol.me/v1/mcp"
}
}
}
Autorizar o acesso
Ao usar uma ferramenta pela primeira vez, o fluxo OAuth sera iniciado no navegador.
Comecar a usar
Use linguagem natural para controlar seus dispositivos pelo Gemini CLI.
Conectando o OpenClaw
O OpenClaw e um assistente pessoal de IA open-source que suporta MCP servers para estender suas capacidades.
Editar o arquivo de configuracao
Adicione ao arquivo ~/.openclaw/openclaw.json:{
"mcpServers": {
"portal": {
"url": "https://portal.unicontrol.me/v1/mcp",
"transport": "streamable-http"
}
}
}
Reiniciar o OpenClaw
Reinicie o gateway do OpenClaw para que a nova configuracao seja carregada.
Autorizar o acesso
Na primeira interacao com uma ferramenta do Portal, o fluxo OAuth sera iniciado no navegador para autenticacao.
Comecar a usar
Agora voce pode pedir ao OpenClaw para controlar seus dispositivos usando linguagem natural.
Usando em Agentes Customizados
Voce pode conectar qualquer agente ao Portal usando o SDK oficial do MCP.
TypeScript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://portal.unicontrol.me/v1/mcp")
);
const client = new Client({
name: "meu-agente",
version: "1.0.0",
});
await client.connect(transport);
// Listar ferramentas disponiveis
const { tools } = await client.listTools();
console.log(`${tools.length} ferramentas disponiveis`);
// Chamar uma ferramenta
const result = await client.callTool({
name: "get_all_states",
arguments: {},
});
console.log(result);
Python
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client("https://portal.unicontrol.me/v1/mcp") as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
# Listar ferramentas
tools = await session.list_tools()
# Chamar uma ferramenta
result = await session.call_tool("get_all_states", {})
print(result)
Para agentes customizados, voce precisara implementar o fluxo OAuth 2.1 manualmente ou fornecer um token de acesso valido nos headers da requisicao.
Exemplos de Uso
Aqui estao alguns exemplos de comandos em linguagem natural que um agente conectado ao Portal pode executar:
| Comando | Ferramentas utilizadas |
|---|
| ”Apague todas as luzes” | list_entities → call_service |
| ”Qual a temperatura do quarto?” | get_entity_state |
| ”Crie uma automacao para ligar a luz ao por do sol” | create_automation |
| ”Liste meus dispositivos offline” | list_devices |
| ”Adicione um card de clima ao dashboard” | get_dashboard → add_card_to_dashboard |
| ”Execute o script de bom dia” | list_scripts → trigger_script |
| ”Abra um chamado de suporte” | create_support_ticket |
| ”Agende uma visita tecnica” | list_scheduling_event_types → get_available_scheduling_times → create_scheduling_link |
Os agentes de IA entendem contexto. Voce pode usar linguagem natural sem precisar saber o nome exato das ferramentas — o agente escolhe automaticamente quais ferramentas usar.