Servidor MCP: un paquete de nodos en capas para crear servidores MCP
Esta biblioteca agrega la capacidad de crear fácilmente servidores MCP con Node In Layers.
Cuenta con una biblioteca complementaria llamada '@node-in-layers/mcp-client', que se utiliza para crear clientes MCP. Ambas bibliotecas comparten las mismas funciones para definir modelos y herramientas.
Nueva capa
Esta biblioteca añade una nueva capa mcp al sistema. Debe colocarse después de la capa express .
Related MCP server: Node Omnibus MCP Server
Uso
Para poder utilizar esta biblioteca, debe realizar adiciones a su configuración, así como crear y exportar capas "mcp" desde sus aplicaciones/dominios.
Configuración
Añade esta aplicación/dominio a tu archivo de configuración. Debes hacerlo antes de las aplicaciones que añadirán herramientas al servidor MCP.
Luego configura la aplicación/dominio mcp con lo siguiente:
const mcpConfig = {
// (optional) The name of your MCP server.
name: 'mcp',
// (optional) The version of your MCP server.
version: '1.0.0',
// The server config from @l4t/mcp-ai/simple-server/types.js
server: {
connection: {
type: 'http',
host: 'localhost',
port: 3000,
},
},
logging: {
// optional
// If you want to change the default. Its 'info' by default.
requestLogLevel: 'info',
// If you want to change the default. Its 'info' by default.
responseLogLevel: 'info',
},
}
const config = {
['@node-in-layers/mcp-server']: mcpConfig,
}
Creación de una capa MCP
Puede crear una capa MCP exportando una función desde su aplicación/dominio que devuelva una capa.
// /src/yourDomain/mcp.ts
import { McpContext, McpNamespace } from '@node-in-layers/mcp-server'
import { Config } from '@node-in-layers/core'
import { YourFeaturesLayer } from './features.js'
const create = (context: McpContext<Config, YourFeaturesLayer>) => {
// Adds your tool.
context.mcp[McpNamespace].addTool({
name: 'my-hello-world-tool',
description: 'My Tool',
execute: async (input: any) => {
return 'Hello, world!'
},
})
// Create a tool from your feature
context.mcp[McpNamespace].addTool({
name: 'my-hello-world-tool',
description: 'My Tool',
inputSchema: {
type: 'object',
properties: {
name: {
type: 'string',
},
},
required: ['name'],
},
execute: (input: any) => {
// You get an object, pass it back to your feature. Handles async for you.
return context.features.yourDomain.yourFeature(input)
},
})
return {}
}
export { create }
Añadiendo modelos
Puedes encapsular tus modelos con funciones CRUDS y añadirlos al servidor MCP con la capa mcp. NOTA: Para que esto funcione, tu capa debe tener una capa de servicios y una de entidades (además de tus modelos). El nodo en capas creará automáticamente una propiedad CRUDS con tus modelos, y podrás añadirlos.
He aquí un ejemplo de cómo hacerlo uno a la vez. (No se recomienda generalmente, pero es posible hacerlo).
// /src/yourDomain/mcp.ts
import { McpContext, McpNamespace } from '@node-in-layers/mcp-server'
import { Config } from '@node-in-layers/core'
import { YourFeaturesLayer } from './features.js'
const create = (context: McpContext<Config, YourFeaturesLayer>) => {
// Adds your models cruds through features.
context.mcp[McpNamespace].addModelCruds(
context.features.yourFeature.cruds.Cars
)
return {}
}
Aquí tienes una forma de cocinar realmente con gas. (Muy recomendable)
// /src/yourDomain/mcp.ts
import { McpContext, McpNamespace, mcpModels } from '@node-in-layers/mcp-server'
import { Config } from '@node-in-layers/core'
import { YourFeaturesLayer } from './features.js'
const create = (context: McpContext<Config, YourFeaturesLayer>) => {
// This automatically adds ALL of your models from features.
mcpModels('yourDomain')(context)
return {}
}
Otra forma de organizar la adición de modelos es desde un dominio mcp centralizado. Incluya este como su último dominio después de cargar todos los demás.
// /src/mcp/mcp.ts
import { McpContext, McpNamespace, mcpModels } from '@node-in-layers/mcp-server'
import { Config } from '@node-in-layers/core'
const create = (context: McpContext<Config>) => {
// Add all your models for your whole system in one go.
mcpModels('yourDomain')(context)
mcpModels('yourDomain2')(context)
mcpModels('yourDomain3')(context)
mcpModels('yourDomain4')(context)
return {}
}