This commit is contained in:
23
.gitea/workflows/build.yml
Normal file
23
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
name: build-and-push
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: docker
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Login to Gitea registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: gitea.interno.com
|
||||||
|
username: tu_usuario
|
||||||
|
password: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push image
|
||||||
|
run: |
|
||||||
|
docker build -t gitea.interno.com/tu_usuario/mi-mcp-server:latest .
|
||||||
|
docker push gitea.interno.com/tu_usuario/mi-mcp-server:latest
|
||||||
8
Dockerfile
Normal file
8
Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM node:20-alpine
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
ENTRYPOINT ["node", "index.js"]
|
||||||
90
README.md
Normal file
90
README.md
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# 🧠 mi-mcp-server
|
||||||
|
|
||||||
|
Servidor MCP (Model Context Protocol) personalizado para exponer herramientas propias como funciones accesibles desde LLMs compatibles (Gemini, Claude, etc).
|
||||||
|
|
||||||
|
Este server corre en Docker y puede ser usado directamente desde stdio usando el SDK de MCP.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Herramientas expuestas
|
||||||
|
|
||||||
|
Actualmente expone:
|
||||||
|
|
||||||
|
- `saludar`: saluda a una persona por su nombre.
|
||||||
|
|
||||||
|
Podés modificar o agregar más herramientas editando el archivo `tools.js`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Estructura del proyecto
|
||||||
|
|
||||||
|
.
|
||||||
|
├── Dockerfile # Imagen mínima de Node.js con tu server MCP
|
||||||
|
├── index.js # Punto de entrada, arranca el servidor MCP
|
||||||
|
├── tools.js # Define tus herramientas y su lógica
|
||||||
|
├── package.json # Dependencias (usa @modelcontextprotocol/server)
|
||||||
|
└── .gitea/workflows/
|
||||||
|
└── build.yml # Workflow para construir y subir imagen a tu Gitea registry
|
||||||
|
|
||||||
|
yaml
|
||||||
|
Copy
|
||||||
|
Edit
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐳 Construcción local
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build -t mi-mcp-server .
|
||||||
|
docker run -it --rm mi-mcp-server
|
||||||
|
🐙 Construcción automática (Gitea Actions)
|
||||||
|
Este repositorio ya incluye un workflow (.gitea/workflows/build.yml) que:
|
||||||
|
|
||||||
|
Se activa en cada push a main
|
||||||
|
|
||||||
|
Construye la imagen
|
||||||
|
|
||||||
|
La sube al registry interno: gitea.interno.com/tu_usuario/mi-mcp-server:latest
|
||||||
|
|
||||||
|
🧪 Uso desde un cliente MCP
|
||||||
|
js
|
||||||
|
Copy
|
||||||
|
Edit
|
||||||
|
import { Client } from '@modelcontextprotocol/sdk/client';
|
||||||
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio';
|
||||||
|
|
||||||
|
const client = new Client({ name: 'local', version: '1.0.0' });
|
||||||
|
|
||||||
|
await client.connect(new StdioClientTransport({
|
||||||
|
command: 'docker',
|
||||||
|
args: ['run', '-i', '--rm', 'gitea.interno.com/tu_usuario/mi-mcp-server:latest']
|
||||||
|
}));
|
||||||
|
|
||||||
|
const tools = await client.listTools(); // ver herramientas disponibles
|
||||||
|
const result = await client.callTool({
|
||||||
|
name: 'saludar',
|
||||||
|
arguments: { nombre: 'Darío' }
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(result.content[0].text); // → Hola, Darío! 👋
|
||||||
|
🔐 Notas
|
||||||
|
Si tu imagen necesita variables de entorno, podés usar -e en el args de Docker.
|
||||||
|
|
||||||
|
Asegurate de que tu bot o app tenga acceso a Docker en el entorno donde corre.
|
||||||
|
|
||||||
|
©️ Licencia
|
||||||
|
MIT — ajustala si vas a distribuir como código cerrado.
|
||||||
|
|
||||||
|
go
|
||||||
|
Copy
|
||||||
|
Edit
|
||||||
|
|
||||||
|
¿Querés que te empaquete esto como zip inicial listo para clonar, con `package.json`, `Dockerfile` y `tools.js`?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user