Salesforce元数据读取器

一个用于安全读取Salesforce元数据的服务器工具,支持多组织配置、只读查询、生产环境安全确认及模式比较。

  • by MarcoFloresCa
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 MarcoFloresCa/MCP-Salesforce

使用说明

MCP Salesforce Reader

MCP server para consultar metadata de Salesforce en modo solo lectura. Diseñado para integrar con OpenCode y permitir a agentes de IA entender estructuras de orgs Salesforce.

Características

  • Multi-org: Configura múltiples orgs (sandboxes, UAT, producción) y selecciona cuál usar en cada consulta
  • Solo lectura: Todas las operaciones son de consulta, nunca modifican la org
  • Producción segura: Requiere confirmación explícita para acceder a producción
  • Query sanitization: Solo SELECT permitido, con límites enforced
  • Enriquecimiento: Las respuestas incluyen información adicional útil para razonamiento
  • Comparación de schemas: Compara objetos y campos entre dos orgs
  • Auditoría completa: Logs de todas las operaciones con sanitización

Seguridad

Confirmación de Producción

Para acceder a cualquier tool en una org marcada como production, primero debes confirmar con confirm_production_access:

// Primero: confirmar acceso
{
  "tool": "confirm_production_access",
  "params": {
    "orgAlias": "banagro-prod",
    "confirmationToken": "TU_TOKEN"
  }
}

// Después: usar otras tools
{
  "tool": "list_objects",
  "params": {
    "orgAlias": "banagro-prod"
  }
}

Query Restrictions

  • Solo SELECT queries permitidas
  • SOSL bloqueado
  • ALL ROWS bloqueado
  • LIMIT forzado (100 en prod, 1000 en sandbox)
  • Producción limitada a 1000 registros max
  • Tooling API limitada a 500 registros max en prod

Herramientas Disponibles

Herramienta Descripción Requiere Confirmación en Prod
confirm_production_access Confirma acceso a producción ❌ No
list_objects Lista todos los objetos disponibles en la org ✅ Sí
describe_object Describe un objeto completo con sus campos ✅ Sí
list_fields Lista los campos de un objeto ✅ Sí
get_field_metadata Obtiene metadata detallada de un campo ✅ Sí
get_formula_field_details Analiza campos fórmula (referencias, complejidad, impacto) ✅ Sí
query_soql_readonly Ejecuta queries SOQL (SELECT solo) ✅ Sí
query_tooling_readonly Ejecuta queries en Tooling API (SELECT solo) ✅ Sí
compare_schemas Compara schemas entre dos orgs ✅ Sí

Requisitos

  • Node.js 18+
  • Cuenta de Salesforce con API access
  • Security token de Salesforce

Instalación

Como paquete npm

npm install mcp-salesforce-reader

Como desarrollo local

git clone <repo> mcp-salesforce-reader
cd mcp-salesforce-reader
npm install
npm run build

Configuración

  1. Copia el archivo de ejemplo:
cp .env.example .env
  1. Edita .env con tus credenciales:
# Org 1: Sandbox Dev
SALESFORCE_BANAGRO_DEV_ALIAS=banagro-dev
SALESFORCE_BANAGRO_DEV_ENVIRONMENT=sandbox
SALESFORCE_BANAGRO_DEV_LOGIN_URL=https://test.salesforce.com
SALESFORCE_BANAGRO_DEV_USERNAME=user@dev.org
SALESFORCE_BANAGRO_DEV_PASSWORD=***
SALESFORCE_BANAGRO_DEV_SECURITY_TOKEN=***

# Org 2: Production
SALESFORCE_BANAGRO_PROD_ALIAS=banagro-prod
SALESFORCE_BANAGRO_PROD_ENVIRONMENT=production
SALESFORCE_BANAGRO_PROD_LOGIN_URL=https://login.salesforce.com
SALESFORCE_BANAGRO_PROD_USERNAME=user@prod.org
SALESFORCE_BANAGRO_PROD_PASSWORD=***
SALESFORCE_BANAGRO_PROD_SECURITY_TOKEN=***

# Token de confirmación para producción
PRODUCTION_CONFIRMATION_TOKEN=mi_token_secreto

# Org por defecto
DEFAULT_ORG_ALIAS=banagro-dev

Formato de Configuración

Cada org necesita:

Campo Descripción Ejemplo
SALESFORCE_<PREFIX>_ALIAS Identificador único banagro-dev
SALESFORCE_<PREFIX>_ENVIRONMENT Tipo de entorno sandbox o production
SALESFORCE_<PREFIX>_LOGIN_URL URL de login https://test.salesforce.com (sandbox) o https://login.salesforce.com (prod)
SALESFORCE_<PREFIX>_USERNAME Usuario de Salesforce admin@miempresa.com
SALESFORCE_<PREFIX>_PASSWORD Contraseña ********
SALESFORCE_<PREFIX>_SECURITY_TOKEN Security token ********

Nota: El sistema detecta automáticamente las orgs buscando variables que terminen en _ALIAS.

Uso con OpenCode

Configuración en opencode.json

{
  "mcpServers": {
    "salesforce-reader": {
      "command": "node",
      "args": ["./node_modules/mcp-salesforce-reader/dist/index.js"],
      "env": {
        "SALESFORCE_BANAGRO_DEV_ALIAS": "banagro-dev",
        "SALESFORCE_BANAGRO_DEV_ENVIRONMENT": "sandbox",
        "SALESFORCE_BANAGRO_DEV_LOGIN_URL": "https://test.salesforce.com",
        "SALESFORCE_BANAGRO_DEV_USERNAME": "user@dev.org",
        "SALESFORCE_BANAGRO_DEV_PASSWORD": "xxx",
        "SALESFORCE_BANAGRO_DEV_SECURITY_TOKEN": "xxx",
        "SALESFORCE_BANAGRO_PROD_ALIAS": "banagro-prod",
        "SALESFORCE_BANAGRO_PROD_ENVIRONMENT": "production",
        "SALESFORCE_BANAGRO_PROD_LOGIN_URL": "https://login.salesforce.com",
        "SALESFORCE_BANAGRO_PROD_USERNAME": "user@prod.org",
        "SALESFORCE_BANAGRO_PROD_PASSWORD": "xxx",
        "SALESFORCE_BANAGRO_PROD_SECURITY_TOKEN": "xxx",
        "PRODUCTION_CONFIRMATION_TOKEN": "xxx",
        "LOG_LEVEL": "info"
      }
    }
  }
}

Ejemplos de Uso

Confirmar acceso a producción

{
  "orgAlias": "banagro-prod",
  "confirmationToken": "mi_token_secreto"
}

Listar objetos

{
  "orgAlias": "banagro-dev"
}

Describir un objeto

{
  "orgAlias": "banagro-dev",
  "objectApiName": "Account"
}

Obtener metadata de un campo

{
  "orgAlias": "banagro-dev",
  "objectApiName": "Account",
  "fieldApiName": "AnnualRevenue"
}

Analizar campo fórmula

{
  "orgAlias": "banagro-dev",
  "objectApiName": "Account",
  "fieldApiName": "AnnualRevenueFormatted__c"
}

Query SOQL

{
  "orgAlias": "prod",
  "query": "SELECT Id, Name, AnnualRevenue FROM Account WHERE AnnualRevenue > 100000",
  "limit": 10
}

Comparar schemas entre orgs

{
  "orgAlias": "prod",
  "targetOrgAlias": "dev",
  "objectApiNames": ["Account", "Opportunity"]
}

Logging y Auditoría

Todas las operaciones se registran con:

  • Timestamp
  • Org alias
  • Environment (sandbox/production)
  • Tool ejecutada
  • Duración
  • Cantidad de registros
  • Query sanitizada (sin valores sensibles)
  • Estado de confirmación de producción

Nunca se registran: passwords, securityTokens, confirmationTokens, credenciales.

Desarrollo

Comandos disponibles

npm run build    # Compila TypeScript
npm run start    # Inicia el servidor
npm run dev      # Build + start para desarrollo
npm run clean    # Limpia archivos compilados

Estructura del proyecto

src/
├── config/          # Carga y validación de configuración
├── auth/            # Autenticación con Salesforce
├── policies/        # Validaciones de seguridad y confirmación
├── tools/           # Herramientas MCP
├── enrichers/       # Enrichment de metadata
├── logging/         # Sistema de logs y auditoría
└── index.ts         # Punto de entrada

Cosas que NO hace este MCP

  • ❌ Operaciones de escritura (create, update, delete)
  • ❌ Ejecutar Apex
  • ❌ Deployment de metadata
  • ❌ Acceso sin confirmación a producción

Licencia

MIT