Frinus

Servidor MCP (Model Context Protocol) que expõe 70 ferramentas abrangendo memória cognitiva, memória de trabalho, sessões, agentes, a hierarquia de conhecimento L0–L3, tarefas de orquestração e pipelines de treinamento. O servidor utiliza stdio e é consumido pelo Claude Desktop, Claude Code, OpenCodex e qualquer cliente compatível com MCP.

Documentação

Servidor MCP Frinus

φρήν + νοῦς — Dá ao seu agente Claude memória cognitiva e de longo prazo, com suporte da plataforma Frinus.

frinus-mcp é um servidor MCP (Model Context Protocol). Ele é a ponte entre seu cliente MCP — Claude Code, Cursor ou Claude Desktop — e a plataforma Frinus hospedada em https://frinus.rdxsec.com.br.

Ele não roda sozinho. Não armazena nada localmente: cada chamada de ferramenta é encaminhada via HTTPS para sua conta Frinus. Então, antes de fazer qualquer coisa útil, você precisa de duas coisas:

  1. uma conta Frinus (gratuita, sem cartão), e
  2. uma chave de API Frinus (sk-frinus-...).

Com isso em vigor, o servidor expõe 70 ferramentas que abrangem memória cognitiva, memória de trabalho, sessões, agentes, a hierarquia de conhecimento L0–L3, tarefas de orquestração e pipelines de treinamento. Ele fala stdio e funciona com qualquer cliente compatível com MCP.

Como tudo se encaixa

+-------------------+        +--------------+        +----------------------------+
| Your MCP client   | stdio  | frinus-mcp   | HTTPS  | Frinus platform            |
| (Claude Code,     | <----> | (this server,| <----> | frinus.rdxsec.com.br       |
|  Cursor, Desktop) |        |  via npx)    |        | (your memories live here)  |
+-------------------+        +--------------+        +----------------------------+

O servidor valida sua chave de API junto à plataforma na inicialização, resolve sua conta + organização e roteia cada chamada de ferramenta para lá. Sem chave de API → ele se recusa a iniciar.

Regra Zero — MCP é obrigatório

O MCP Frinus é a memória de longo prazo, a identidade e a inteligência do agente. Sem ele, o modelo não tem estado entre sessões. Todo agente Claude que se integra ao Frinus deve:

  1. Verificar se as ferramentas MCP estão acessíveis no início da conversa (ex.: session_start, memory_search, search_with_attention).
  2. Se inacessíveis, exibir o aviso ao usuário: "MCP Frinus não está conectado. Os recursos de memória de longo prazo estão indisponíveis."
  3. Executar o protocolo BOOT (P1) antes de responder qualquer coisa que não seja uma saudação trivial.
  4. Persistir aprendizados via memory_store antes de encerrar sessões produtivas.

O conjunto completo de protocolos vive no CLAUDE.md global (organização Frinus), resumido abaixo em Os 7 Protocolos.

Antes de começar — conta + chave de API

Você precisa de uma conta Frinus e uma chave de API. Ambos são gratuitos.

1. Crie uma conta gratuita

Cadastre-se em https://frinus.rdxsec.com.br. O plano Free (R$0) é suficiente para começar:

  • 100 memórias
  • 20 consultas/dia
  • sem necessidade de cartão de crédito

2. Gere uma chave de API

Depois de logado, abra as configurações da sua conta em Settings → API Keys e crie uma nova chave. Você receberá um valor com o formato:

sk-frinus-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Copie agora — por segurança, ela é exibida apenas uma vez. Esse valor vai para a variável de ambiente FRINUS_API_KEY abaixo. Trate-a como uma senha; nunca a envie para um repositório.

Primeiros passos (do zero à primeira memória)

Cinco minutos, quatro etapas.

Etapa 1 — Crie sua conta

Cadastre-se em https://frinus.rdxsec.com.br (plano Free, sem cartão). Veja acima.

Etapa 2 — Gere sua chave de API

Settings → API Keys → criar. Copie o valor de sk-frinus-.... Veja acima.

Etapa 3 — Adicione o servidor ao seu cliente

Você não instala nada — npx busca e executa o pacote sob demanda. O único valor que você precisa fornecer é sua chave de API; as URLs da plataforma já usam produção por padrão.

Claude Code (uma linha):

claude mcp add frinus --env FRINUS_API_KEY=sk-frinus-... -- npx -y frinus-mcp@latest

Cursor / Claude Desktop / qualquer cliente (JSON de configuração):

{
  "mcpServers": {
    "frinus": {
      "command": "npx",
      "args": ["-y", "frinus-mcp@latest"],
      "env": {
        "FRINUS_API_KEY": "sk-frinus-..."
      }
    }
  }
}

Locais dos arquivos de configuração:

  • Claude Code: ~/.claude.json, em mcpServers.
  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) / ~/.config/claude/claude_desktop_config.json (Linux). Ou use a extensão de um clique .mcpb e apenas cole sua chave de API.
  • Cursor: ~/.cursor/mcp.json, em mcpServers.

Reinicie o cliente para que ele reconheça o novo servidor.

Substitua sk-frinus-... pela chave real da Etapa 2. Normalmente você define apenas FRINUS_API_KEY — toda URL de backend já usa a plataforma hospedada por padrão. Veja Variáveis de Ambiente para a lista completa e a substituição para self-host.

Etapa 4 — Valide com sua primeira memória

No seu cliente, peça ao agente para armazenar e recuperar algo:

Store this in Frinus memory: "Our staging DB is reset every night at 02:00 UTC."

depois, na mesma sessão ou em uma posterior:

What time does our staging DB reset?

Nos bastidores, o agente chama memory_store e depois memory_search / search_with_attention. Se a recuperação retornar, a ponte está ativa. Você pode confirmar que a mesma memória aparece no aplicativo web em https://frinus.rdxsec.com.br.

Variáveis de Ambiente

No uso normal, você define apenas FRINUS_API_KEY. As URLs de serviço já apontam para a plataforma hospedada — deixe-as como estão, a menos que você use self-host (veja Avançado — self-host).

VariávelPadrão (plataforma hospedada)Descrição
FRINUS_API_KEYobrigatóriaSua chave de API pessoal (sk-frinus-...). Resolve conta + organização na inicialização.
MEMORY_SERVICE_URLhttps://frinus-memory.rdxsec.com.brURL base do Memory Engine
FRINUS_CP_URLhttps://frinus-api.rdxsec.com.brURL base do Control Plane (conta, organizações, chaves de API, cobrança)
AGENT_SERVICE_URLhttps://frinus-agents.rdxsec.com.brURL base do Agent Service (agentes, invocação, habilidades)
FRINUS_MEMORY_API_KEYFallback legado para FRINUS_API_KEY

Na inicialização, o servidor valida a chave de API junto à plataforma e resolve sua organização + usuário logado. Se a validação falhar, ele aborta com [FATAL] para que o cliente exiba o erro — verifique novamente a chave em Settings → API Keys.

Os 7 Protocolos

ProtocoloQuandoFerramentasPropósito
P1 — BOOTInício de toda sessãosession_start, working_memory_get, search_with_attentionCarregar identidade + estado recente + contexto relevante
P2 — CONSULTAntes de qualquer açãosearch_with_attention, session_context, memory_reinforce, memory_weakenRecuperar, avaliar e reforçar memórias relevantes
P3 — PLANAo planejar uma tarefamemory_store(procedural), working_memory_add, stream_capturePersistir planos, estado de trabalho e decisões arquiteturais
P4 — CAPTUREA cada 2–3 interaçõesheartbeat_tick, working_memory_add, memory_store(episodic), stream_captureRegistro contínuo de progresso, bugs e padrões
P5 — LEARNNovo conhecimentotraining_teach, training_qa, training_stats, stream_process, sleep_runEnsinar fatos/procedimentos e executar ciclos de consolidação
P6 — AUDITManutençãoconsolidation_detect_conflicts, consolidation_resolve_conflict, consolidation_detect_redundant, hierarchy_consolidateDetectar conflitos, redundância e consolidar memórias
P7 — CLOSEFim da sessãosession_summary, stream_process, memory_store, hierarchy_consolidate, session_endResumir, promover itens do stream, persistir aprendizados

Os scripts detalhados dos protocolos vivem no CLAUDE.md do agente. Trate a tabela acima como o contrato que todo agente integrado ao Frinus deve respeitar.

Referência de Ferramentas

70 ferramentas agrupadas por domínio. Cada ferramenta retorna conteúdo de texto; os payloads seguem a especificação MCP Tool. Os schemas JSON completos estão em src/tools/definitions.ts.

Memória (7)

Memória cognitiva de longo prazo: episódica (o que aconteceu), semântica (o que eu sei), procedural (como fazer as coisas).

FerramentaDescrição
memory_storeCriar uma memória. agent_id, content obrigatórios. memory_type ∈ {episodic, semantic, procedural}. scope ∈ {user, agent, universe, organization}. importance 0–1.
memory_searchBusca por similaridade semântica. Filtros: agent_id, memory_types, limit.
memory_getBuscar uma memória por memory_id (conteúdo completo, metadados, relevância).
memory_listListar memórias de um agent_id com filtro opcional de tipo.
memory_deleteExcluir permanentemente uma memória por memory_id.
memory_reinforceAumentar a relevância de uma memória útil (memory_id, boost 0–1, padrão 0.1).
memory_weakenPenalizar uma memória desatualizada (memory_id, penalty 0–1, padrão 0.2).

Memória de Trabalho (3)

Estado de curto prazo, vinculado ao contexto. Lei de Miller: máximo de 7 itens por contexto, o mais antigo é removido automaticamente. TTL padrão de 30 min (máx. 2 h).

FerramentaDescrição
working_memory_getCarregar o estado atual de um contexto. Sempre chamar no início da tarefa.
working_memory_addPersistir o estado atual. Formatos de contexto: agent:{uuid}, universe:{uuid}, organization:{uuid}.
working_memory_clearRemover todos os itens de um contexto.

Sessões (5)

Sessão = contêiner lógico para streams, memória de trabalho e captura.

FerramentaDescrição
session_startIniciar uma sessão para um agente. Retorna session_id. Suporta parent_session_id para herança de subagentes.
session_endEncerrar uma sessão e finalizar seu resumo.
session_contextRecuperação combinada de trabalho + longo prazo, aprimorada com tópicos de sessão extraídos.
session_summaryGerar um resumo estruturado (decisões, aprendizados, itens pendentes).
session_clearLimpar o estado de trabalho de uma sessão sem encerrá-la.

Stream (4)

Pipeline de captura contínua. Os itens são agrupados, pontuados e os importantes são promovidos a memórias permanentes.

FerramentaDescrição
stream_captureRegistrar uma entrada / saída / nota interna vinculada a uma sessão.
stream_get_sessionReproduzir todos os itens capturados de um session_id.
stream_get_recentItens recentes do stream entre sessões (filtráveis).
stream_processPromover itens pendentes para memória de longo prazo (gatilho manual; o agendador também executa a cada 5 min).

Contexto e Atenção (2)

FerramentaDescrição
memory_get_contextConstruir uma janela de contexto limitada por tokens para uma descrição de tarefa.
search_with_attentionRAG com ponderação ciente do tipo de tarefa. task_type ∈ {implementation, debug, deploy, documentation, review} orienta os pesos de memory_type.

Usuários (2)

FerramentaDescrição
user_registerRegistrar um usuário no sistema de memória (idempotente).
user_get_contextRecuperar memórias combinadas do usuário e contexto do tenant.

Manutenção (2)

FerramentaDescrição
heartbeat_tickTick barato para um agente — orienta o decaimento de relevância e consolidação leve.
sleep_runAcionar um ciclo de sono. phases ⊆ {evaluation, forgetting, consolidation, relevance}. Espelha os sonos normal/profundo do agendador.

Consolidação (3)

FerramentaDescrição
consolidation_detect_conflictsApresentar memórias candidatas em conflito acima de um limite de similaridade.
consolidation_resolve_conflictManter uma memória e substituir a outra com uma nota de resolução escrita.
consolidation_detect_redundantEncontrar quase duplicatas prontas para mesclagem ou remoção.

Hierarquia de Memória (2)

FerramentaDescrição
hierarchy_consolidateConsolidar várias memórias relacionadas em uma memória-resumo de nível superior.
hierarchy_get_treeInspecionar a árvore de consolidação de uma memória raiz.

Agentes (6)

CRUD de agentes + invocação orquestrada.

FerramentaDescrição
agent_createCriar um agente (opcionalmente a partir de um template) com escopo em um universo / equipe.
agent_listListar agentes no tenant do chamador. Escopo automático via chave de API.
agent_getBuscar um agente por agent_id.
agent_updateAtualizar persona, equipe, universo, etc.
agent_deleteExcluir um agente.
agent_invokeInvocar programaticamente um agente com uma tarefa. Retorna suas chamadas de ferramenta e a resposta final. Usado por delegação.

Universos (4)

Universo = domínio de conhecimento com escopo de tenant. Contém a hierarquia L0–L3.

FerramentaDescrição
universe_createCriar um universo na organização do chamador. Slug + nome + descrição.
universe_listListar universos para a organização resolvida.
universe_updateAtualizar um universo (nome, descrição).
universe_hierarchyPercorrer a árvore completa L0 → L3 para um universo com ícones de status.

Hierarquia de Conhecimento L0–L3 (16)

Universe
  └─ Concept   (L0)  body of knowledge
       └─ Theme  (L1)  thematic split
            └─ Topic   (L2)  unit of work (status: pending / in_progress / completed)
                 └─ Point   (L3)  atomic knowledge unit

Cada nível expõe create, list, update, delete:

  • Conceitos L0: concept_create, concept_list, concept_update, concept_delete
  • Temas L1: theme_create, theme_list, theme_update, theme_delete
  • Tópicos L2: topic_create, topic_list, topic_update, topic_delete
  • Pontos L3: point_create, point_list, point_update, point_delete

topic_update e point_update aceitam um campo status para que agentes possam marcar progresso.

Pipeline de Treinamento (6)

Ensine o sistema explicitamente — fatos, procedimentos, pares de perguntas e respostas, documentos completos.

FerramentaDescrição
training_teachInjetar um fato ou procedimento. type ∈ {semântico, procedural}.
training_qaTreinar com pairs de {question, answer}.
training_statsEstatísticas de cobertura em todo o corpus.
training_gapsLacunas detectadas no conhecimento / tópicos com cobertura fraca.
training_recentMemórias mais recentemente ingeridas do treinamento.

Orquestração — Tarefas (4)

A tabela de tarefas no Memory Engine conduz a orquestração multiagente.

FerramentaDescrição
task_createCriar uma tarefa (título, descrição, assigned_agent_id opcional, tarefa pai).
task_getBuscar uma tarefa com seu estado completo.
task_listListar tarefas com filtros (status, agente, pai).
task_updateAtualizar status, saída ou atribuição.

Habilidades (4)

Comportamentos reutilizáveis atribuídos a agentes.

FerramentaDescrição
skill_listEnumerar habilidades disponíveis no tenant.
skill_assignAnexar uma habilidade a um agente.
skill_removeDesanexar uma habilidade de um agente.
skill_agent_listListar as habilidades de um determinado agente.

Cofre de Credenciais (5) — broker credential_exec

Credenciais criptografadas armazenadas no Control Plane, referenciadas a partir de memórias via credential_ref.

FerramentaDescrição
credential_storeArmazenar uma credencial criptografada sob uma referência (ex.: mysql_x).
credential_getInspecionar apenas metadados não secretos (host/usuário/db/porta + as variáveis de ambiente que credential_exec injetará). Nunca retorna o valor.
credential_execExecutar um comando com a credencial injetada no ENV do processo filho. Retorna apenas stdout/stderr/exit_code — o segredo nunca chega ao modelo, à tela ou ao disco.
credential_listListar referências de credenciais armazenadas (sem dados secretos).
credential_deleteExcluir uma credencial armazenada.

Princípio de manuseio de segredos — broker no lado do servidor, nunca por valor. O modelo nunca recebe um valor secreto: sem texto simples, sem arquivos temporários, sem trechos de shell que carreguem o segredo. Para usar uma credencial, você chama credential_exec. O servidor MCP (já em execução localmente via npx -y frinus-mcp@latest) busca a credencial no cofre, injeta seus campos no ambiente de um processo filho — nunca em argv, nunca em qualquer texto que o modelo veja — executa o comando com shell:false (sem injeção de shell) e retorna apenas a saída.

// MYSQL_PWD / MYSQL_USER / MYSQL_HOST are pre-injected → standard clients just work
credential_exec(ref="mysql_prod", argv=["mysql", "-e", "SELECT 1"])
credential_exec(ref="pg_prod",    argv=["psql",  "-c", "SELECT 1"])

// For anything else, read the injected vars inside an explicit shell:
credential_exec(ref="jira_x", argv=["sh","-c",
  "curl -sS -H \"Authorization: Bearer $CRED_TOKEN\" \"$CRED_BASE_URL/whoami\""])

Variáveis de ambiente injetadas (quando presentes na credencial): senha/segredo/token → MYSQL_PWD, PGPASSWORD, CRED_PASSWORD; user/usernameCRED_USER, MYSQL_USER, PGUSER; hostCRED_HOST, MYSQL_HOST, PGHOST; portCRED_PORT, MYSQL_TCP_PORT, PGPORT; databaseCRED_DATABASE, PGDATABASE; qualquer outro escalar → CRED_<UPPER_SNAKE> (ex.: base_urlCRED_BASE_URL). argv deve ser um array de strings (sem string de comando shell; use ["sh","-c","..."] se você realmente precisar de um shell). Timeout de 30s, limite de saída de 256 KiB. Tudo vem no pacote npm — o usuário não instala nada, não edita o PATH e não executa nenhum comando extra; um MCP atualizado é tudo o que é necessário.

Tipos de Memória

TipoCaso de UsoExemplo
episodicRegistrar o que aconteceuBug: payment endpoint returned 500. Cause: missing null check on customer.address. Fix: guard + 422 response. File: services/payment.py
semanticArmazenar fatos e conhecimento`MemoryResponse now includes universe_id (UUID
proceduralDocumentar procedimentos de como fazerProcedure: rotate-claude-credentials. Steps: 1) aws ecr login, 2) kubectl set image deployment/agent..., 3) verify pod is Ready. Caveat: deployment is named "agent", not "agent-service".

Escopos

EscopoVisibilidadeCaso de Uso
userSomente o usuário que armazenaPreferências pessoais e histórico
agentSomente o agente que armazenaNotas privadas do agente
universeTodos os agentes dentro do universo (departamento)Conhecimento de domínio compartilhado
organizationTodos os agentes no tenantProcedimentos e fatos de toda a organização

Os escopos legados agent / project / global foram aposentados juntamente com project_id. Universos substituíram projetos como o limite de isolamento dentro de uma organização.

Melhores Práticas

Formatos obrigatórios para memórias — torne a recuperação futura determinística:

  • Bug: Bug: <description>. Cause: <root cause>. Fix: <solution>. File: <path>
  • Padrão: Pattern: <description>. When to use: <context>. File: <path>
  • Procedimento: Procedure: <name>. Steps: 1) ... 2) ... 3) .... Caveats: <warnings>

Diretrizes operacionais:

  1. Sempre inicialize primeiro. Chame session_start + working_memory_get + search_with_attention antes de responder.
  2. Reforce / enfraqueça no uso. Quando uma memória recuperada ajuda, memory_reinforce. Quando está errada, memory_weaken (e substitua-a).
  3. Capture a cada 2–3 turnos. working_memory_add para estado, stream_capture para decisões, memory_store para aprendizados cristalizados.
  4. Escolha o task_type certo. search_with_attention pondera tipos de memória por tarefa. debug favorece episódica, documentation favorece semântica, deploy favorece procedural.
  5. Feche o ciclo. Termine as sessões com session_summary + stream_process + session_end. Execute sleep_run para consolidação mais profunda quando os lotes crescerem.
  6. Audite antes que a desordem se acumule. consolidation_detect_conflicts + consolidation_detect_redundant periódicos mantêm a recuperação nítida.

Arquitetura

+---------------------+       +------------------+       +----------------------+
| Claude Agent /      | <---> | Frinus MCP       | <---> | Memory Engine        |
| Claude Code         | stdio | (this server)    | HTTPS | (memories, sessions, |
+---------------------+       +------------------+       |  hierarchy, tasks)   |
                                |                        +----------------------+
                                |                                  |
                                |                                  v
                                |                        +----------------------+
                                |                        | PostgreSQL+pgvector  |
                                |                        | + Apache AGE (graph) |
                                |                        +----------------------+
                                |
                                +---HTTPS---> Control Plane (universes, orgs)
                                +---HTTPS---> Agent Service (agents, invocation, skills)
  • Memory Engine é dono das memórias, memória de trabalho, sessões, streams, hierarquia L0–L3, treinamento, ciclos de sono, tarefas, habilidades.
  • Control Plane é dono de organizações, universos, membros, chaves de API, cobrança, credenciais, white-label, chaves de LLM.
  • Agent Service é dono do runtime do agente, despacho de ferramentas, roteamento de equipe, persona, invocação.

O isolamento de tenant é banco-de-dados-por-tenant. O MCP resolve o ID da organização do seu tenant a partir da chave de API na inicialização — você nunca passa org_id manualmente.

Avançado — auto-hospedagem / desenvolvimento local

Tudo acima tem como alvo a plataforma hospedada em https://frinus.rdxsec.com.br,, que é o que quase todo mundo quer. Se você executa sua própria pilha Frinus (ou desenvolve o MCP contra um backend local), compile a partir do código-fonte e substitua as três URLs:

git clone https://github.com/frinus-ai/frinus-mcp && cd frinus-mcp
npm install
npm run build      # emits dist/index.js
{
  "mcpServers": {
    "frinus": {
      "command": "node",
      "args": ["/absolute/path/to/mcp/dist/index.js"],
      "env": {
        "FRINUS_API_KEY": "sk-frinus-...",
        "MEMORY_SERVICE_URL": "http://localhost:8001",
        "FRINUS_CP_URL": "http://localhost:8000",
        "AGENT_SERVICE_URL": "http://localhost:8002"
      }
    }
  }
}

Publicação (mantenedores)

# 1) npm package — powers `npx -y frinus-mcp` everywhere
npm version <patch|minor|major>
npm publish                      # prepublishOnly runs the build

# 2) .mcpb bundle — powers the Claude Desktop one-click install
npm run pack:mcpb                # -> frinus.mcpb
gh release upload v<version> frinus.mcpb --repo frinus-ai/frinus-mcp --clobber
# Frontend points at: releases/latest/download/frinus.mcpb

Desenvolvimento

mcp/
  src/
    index.ts                       Entry: MCP server, dispatch, auth bootstrap
    client/
      memory-client.ts             HTTP client + identity state for Memory Engine
      cp-client.ts                 HTTP client for Control Plane
      agent-client.ts              HTTP client for Agent Service
    tools/
      definitions.ts               Tool schemas (70 tools)
      handlers.ts                  Tool handlers (70 handlers)
    capture/
      interaction-capture.ts       Auto stream capture for every tool call
    types/
      index.ts                     Shared types
  dist/                            Compiled output (npm run build)
  package.json
  tsconfig.json

Scripts:

npm run build     # tsc to dist/
npm run dev       # tsx hot reload (src/index.ts)
npm start         # node dist/index.js

Verificação de tipos: TypeScript 5.6+, módulos ES, axios.

Licença

Consulte a raiz do repositório para os termos de licença.