MCP Patrimônio

MCP Patrimônio

Enables users to manage asset inventory (patrimônio) through a standardized MCP interface, allowing CRUD operations, queries by sector or user, and aggregated statistics.

Category
访问服务器

README

MCP Patrimônio - Servidor de Gestão de Patrimônio

Version Node TypeScript Docker

Servidor MCP (Model Context Protocol) para gestão de patrimônio desenvolvido para o homeLab Jads. Este projeto fornece uma interface padronizada para interagir com sistemas de controle de patrimônio através do protocolo MCP.

📋 Índice

🎯 Visão Geral

O MCP Patrimônio é um servidor que implementa o Model Context Protocol para fornecer acesso estruturado a dados de patrimônio. Ele atua como uma camada intermediária entre aplicações cliente (como assistentes de IA) e APIs de gestão de patrimônio.

O que é MCP?

O Model Context Protocol (MCP) é um protocolo padronizado para comunicação entre modelos de IA e ferramentas externas. Ele permite que assistentes de IA executem ações e consultem dados de forma estruturada e segura.

✨ Características

  • 🔧 9 Ferramentas MCP: Conjunto completo de operações CRUD para patrimônio
  • 🔐 Autenticação Bearer Token: Segurança via token de autenticação
  • Validação com Zod: Validação robusta de entrada e saída
  • 📊 Estatísticas: Análise agregada de dados de patrimônio
  • 🚀 TypeScript: Desenvolvimento type-safe
  • 📝 Logging Estruturado: Sistema de logs com diferentes níveis
  • Rate Limiting: Controle de taxa de requisições
  • 🧪 Testes Completos: Suite de testes com Vitest
  • 🔄 Arquitetura Modular: Fácil extensão e manutenção

📦 Pré-requisitos

  • Node.js >= 22.15.0 (versão LTS recomendada para produção)
  • npm >= 10.0.0
  • Acesso a uma API de patrimônio compatível
  • Token de autenticação da API

🚀 Instalação

Instalação Local

# Clone o repositório
git clone <url-do-repositorio>
cd mcppatrimonio

# Instale as dependências
npm install

# Build do projeto
npm run build

Instalação via Docker (Recomendado para Produção)

# Clone o repositório
git clone <url-do-repositorio>
cd mcppatrimonio

# Configure variáveis de ambiente
cp .env.example .env
# Edite .env com suas configurações

# Build e execute com Docker Compose
docker compose up -d

# Verifique os logs
docker compose logs -f

Veja o Guia Docker Completo para instruções detalhadas.

Instalação via npm (quando publicado)

npm install -g mcppatrimonio

⚙️ Configuração

1. Variáveis de Ambiente

Crie um arquivo .env na raiz do projeto baseado no .env.example:

cp .env.example .env

Configure as seguintes variáveis:

# URL base da API de patrimônio
PATRIMONIO_BASE_URL=https://api.example.com

# Token de autenticação da API
PATRIMONIO_TOKEN=seu_token_aqui

# Ambiente de execução
NODE_ENV=development

# Nível de log (debug, info, warn, error)
LOG_LEVEL=info

# Rate Limiting - Janela de tempo em ms (padrão: 60000)
RATE_LIMIT_WINDOW_MS=60000

# Rate Limiting - Máximo de requisições por janela (padrão: 100)
RATE_LIMIT_MAX_REQUESTS=100

2. Configuração do Cliente MCP

Para usar com Claude Desktop ou outro cliente MCP, adicione ao arquivo de configuração:

Claude Desktop (Windows) Caminho: %APPDATA%\Claude\claude_desktop_config.json

Claude Desktop (macOS) Caminho: ~/Library/Application Support/Claude/claude_desktop_config.json

Opção A: Instalação Local (Node.js)

{
  "mcpServers": {
    "Patrimonio": {
      "command": "node",
      "args": [
        "C:\\caminho\\completo\\para\\mcppatrimonio\\dist\\index.js"
      ],
      "env": {
        "PATRIMONIO_BASE_URL": "https://api.example.com",
        "PATRIMONIO_TOKEN": "seu_token_aqui",
        "NODE_ENV": "production",
        "LOG_LEVEL": "info"
      }
    }
  }
}

Opção B: Docker (Recomendado para Produção)

{
  "mcpServers": {
    "Patrimonio": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--env-file",
        "C:\\caminho\\completo\\para\\mcppatrimonio\\.env",
        "mcppatrimonio:latest"
      ]
    }
  }
}

Nota: Para Docker, certifique-se de que a imagem foi construída com docker compose build ou docker build -t mcppatrimonio:latest .

🛠️ Ferramentas Disponíveis

O servidor disponibiliza 9 ferramentas MCP:

1. neviim_info

Retorna informações sobre o servidor MCP.

Parâmetros: Nenhum

Retorno: Informações do servidor, versão, descrição

2. neviim_get_patrimonio

Obtém informações de um patrimônio específico pelo número.

Parâmetros:

  • numero (string): Número do patrimônio

Retorno: Objeto Patrimonio completo

3. neviim_get_patrimonios_por_setor

Lista todos os patrimônios de um setor específico.

Parâmetros:

  • setor (string): Nome do setor

Retorno: Array de objetos Patrimonio

4. neviim_get_patrimonios_por_usuario

Lista todos os patrimônios associados a um usuário.

Parâmetros:

  • usuario (string): Nome do usuário

Retorno: Array de objetos Patrimonio

5. neviim_get_patrimonio_por_id

Obtém um patrimônio pelo ID único.

Parâmetros:

  • id (string): ID do patrimônio

Retorno: Objeto Patrimonio

6. neviim_update_patrimonio

Atualiza os dados de um patrimônio existente.

Parâmetros:

  • id (string): ID do patrimônio
  • data (object): Dados a serem atualizados

Retorno: Objeto Patrimonio atualizado

7. neviim_create_patrimonio

Cria um novo registro de patrimônio.

Parâmetros:

  • data (object): Dados do novo patrimônio

Retorno: Objeto Patrimonio criado

8. neviim_get_estatisticas

Retorna estatísticas agregadas sobre os patrimônios.

Parâmetros: Nenhum

Retorno: Estatísticas (total, por setor, por tipo, por locação)

9. neviim_get_version

Retorna informações de versão do sistema.

Parâmetros: Nenhum

Retorno: Versão do servidor e timestamp

📚 Exemplos de Uso

Exemplo 1: Consultar Patrimônio pelo Número

// Via Claude Desktop ou cliente MCP
// Use a ferramenta: neviim_get_patrimonio

{
  "numero": "PAT-001"
}

// Resposta:
{
  "id": "abc123",
  "numero": "PAT-001",
  "setor": "TI",
  "usuario": "João Silva",
  "tipoEquipamento": "Notebook",
  "locacao": "Sala 101",
  "descricao": "Dell Latitude 5520",
  "valor": 3500.00,
  "dataAquisicao": "2024-01-15"
}

Exemplo 2: Listar Patrimônios por Setor

// Use a ferramenta: neviim_get_patrimonios_por_setor

{
  "setor": "TI"
}

// Resposta: Array com todos os patrimônios do setor TI

Exemplo 3: Criar Novo Patrimônio

// Use a ferramenta: neviim_create_patrimonio

{
  "data": {
    "numero": "PAT-123",
    "setor": "RH",
    "usuario": "Maria Santos",
    "tipoEquipamento": "Desktop",
    "locacao": "Sala 205",
    "descricao": "HP EliteDesk 800 G6",
    "valor": 2800.00,
    "dataAquisicao": "2024-10-06"
  }
}

// Resposta: Objeto do patrimônio criado com ID

Exemplo 4: Atualizar Patrimônio

// Use a ferramenta: neviim_update_patrimonio

{
  "id": "abc123",
  "data": {
    "usuario": "Pedro Costa",
    "locacao": "Sala 102"
  }
}

// Resposta: Objeto do patrimônio atualizado

Exemplo 5: Obter Estatísticas

// Use a ferramenta: neviim_get_estatisticas

{}

// Resposta:
{
  "total": 150,
  "porSetor": {
    "TI": 45,
    "RH": 20,
    "Financeiro": 35,
    "Operações": 50
  },
  "porTipoEquipamento": {
    "Notebook": 60,
    "Desktop": 50,
    "Monitor": 40
  },
  "porLocacao": {
    "Sala 101": 10,
    "Sala 102": 8,
    "Sala 201": 12
  },
  "valorTotal": 425000.00
}

🏗️ Arquitetura

Estrutura de Pastas

mcppatrimonio/
├── src/
│   ├── config/          # Configurações (env, constantes)
│   ├── core/            # Núcleo (MCPServer, types)
│   ├── handlers/        # Handlers (Tool, Resource)
│   ├── middleware/      # Middleware (validator, errorHandler)
│   ├── services/        # Services (patrimonio, estatisticas, version)
│   ├── tools/           # Ferramentas MCP
│   ├── utils/           # Utilitários (logger, security)
│   └── index.ts         # Entry point
├── tests/               # Testes
├── dist/                # Build output
├── .env.example         # Exemplo de configuração
├── package.json
├── tsconfig.json
└── vitest.config.ts

Fluxo de Dados

Cliente MCP (Claude)
      ↓
MCP Server (stdio)
      ↓
Tool Handler
      ↓
BaseTool (validação)
      ↓
Service Layer
      ↓
API Externa (HTTP)

Componentes Principais

1. MCPServer (src/core/MCPServer.ts)

Gerencia o servidor MCP, conexão stdio e registro de ferramentas.

2. BaseTool (src/tools/BaseTool.ts)

Classe abstrata base para todas as ferramentas, fornecendo:

  • Validação automática com Zod
  • Tratamento de erros padronizado
  • Logging estruturado
  • Helpers para respostas

3. Services (src/services/)

Camada de serviço que encapsula a comunicação com APIs externas:

  • PatrimonioService: Operações CRUD de patrimônio
  • EstatisticasService: Agregação de estatísticas
  • VersionService: Informações de versão

4. Middleware (src/middleware/)

  • validator.ts: Validação com Zod schemas
  • errorHandler.ts: Tratamento centralizado de erros

🧪 Testes

O projeto usa Vitest para testes.

# Executar testes
npm test

# Testes em modo watch
npm run test:watch

# Testes com UI
npm run test:ui

# Cobertura de testes
npm run test:coverage

🔧 Desenvolvimento

Scripts Disponíveis

# Build do projeto
npm run build

# Build em modo watch
npm run build:watch

# Limpar build
npm run clean

# Iniciar servidor
npm start

# Desenvolvimento (build + start)
npm run dev

# Desenvolvimento com watch
npm run dev:watch

# Type checking
npm run typecheck

# Linter (a configurar)
npm run lint

Criar Nova Ferramenta

  1. Crie um arquivo em src/tools/MinhaFerramentaTool.ts:
import { z } from "zod";
import { BaseTool } from "./BaseTool.js";
import type { MCPToolResult, ToolExecutionContext } from "../core/types.js";

interface MinhaFerramentaParams {
  parametro: string;
}

export class MinhaFerramentaTool extends BaseTool<MinhaFerramentaParams> {
  readonly name = "neviim_minha_ferramenta";
  readonly title = "Minha Ferramenta";
  readonly description = "Descrição da ferramenta";
  readonly inputSchema = z.object({
    parametro: z.string(),
  });

  protected async executeInternal(
    params: MinhaFerramentaParams,
    context: ToolExecutionContext
  ): Promise<MCPToolResult> {
    // Implementação
    const resultado = { /* ... */ };
    return this.success(resultado);
  }
}
  1. Export em src/tools/index.ts
  2. Registre em src/index.ts

🤝 Contribuindo

Contribuições são bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/MinhaFeature)
  3. Commit suas mudanças (git commit -m 'Add: Minha nova feature')
  4. Push para a branch (git push origin feature/MinhaFeature)
  5. Abra um Pull Request

Padrões de Código

  • Use TypeScript
  • Siga os padrões ESLint (quando configurado)
  • Adicione testes para novas funcionalidades
  • Documente APIs públicas com JSDoc
  • Use commits semânticos

📄 Licença

ISC License - homeLab Jads

🙋 Suporte

Para questões e suporte, abra uma issue no repositório do projeto.

📦 Deploy em Produção

Docker (Recomendado)

O projeto está totalmente configurado para Docker:

# Build da imagem
docker compose build

# Iniciar em produção
docker compose up -d

# Verificar status
docker compose ps

# Ver logs
docker compose logs -f

Recursos Docker:

  • ✅ Multi-stage build otimizado
  • ✅ Imagem Alpine (~150MB)
  • ✅ Usuário não-root
  • ✅ Health checks configurados
  • ✅ Resource limits
  • ✅ Auto-restart

Documentação completa: docs/DOCKER.md

Kubernetes

Exemplo de deployment em Kubernetes disponível em docs/DOCKER.md.

🔗 Links Úteis

📖 Documentação Adicional

🚀 Começando

🐳 Docker

📚 Referência

🔧 Desenvolvimento

🚀 Produção


推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选