4.5 KiB
4.5 KiB
Tasks: create-outline-mcp-server
1. Entorno de desarrollo (devcontainer)
- 1.1 Crear
.devcontainer/devcontainer.jsoncon la imagenmcr.microsoft.com/devcontainers/go:1-1.22-bookworm - 1.2 Configurar extensiones del editor (
golang.gocon gopls) y settings (go.useLanguageServer: true) - 1.3 Añadir
postCreateCommandque instalegolangci-linty ejecutego mod downloadcuando existago.mod - 1.4 Verificar: Given el proyecto abierto en DevPod/Dev Containers, When el contenedor se construye, Then dispone de Go 1.22, gopls y golangci-lint operativos
2. Inicialización del módulo Go
- 2.1 Ejecutar
go mod init outline-mcpdentro del contenedor - 2.2 Instalar dependencias:
go get github.com/mark3labs/mcp-go/mcp github.com/mark3labs/mcp-go/server - 2.3 Instalar la librería de auto-update:
go get github.com/minio/selfupdate - 2.4 Verificar: Given
go.modcreado, When se ejecutago mod tidy, Then no hay errores ygo.sumqueda generado
3. CLI y esqueleto del servidor MCP
- 3.1 Crear
main.gocon variables globales inyectables (Version,GiteaURL,RepoOwner,RepoName) y parsing de argumentos (version,update; sin argumentos → servidor MCP) - 3.2 Implementar el comando
versionque imprime la versión compilada - 3.3 Arrancar el servidor MCP con
server.NewMCPServery transporte stdio (ServeStdio) - 3.4 Verificar: Given el binario compilado con
-ldflags -X main.Version=v0.0.1-dev, When se ejecutaversion, Then imprimev0.0.1-dev; When se ejecuta sin argumentos, Then el proceso queda a la espera en stdio
4. Cliente HTTP de Outline
- 4.1 Implementar el struct
OutlineClientconfigurado desdeOUTLINE_URLyOUTLINE_API_KEY - 4.2 Implementar método genérico
post(ctx, path, payload, result)que serialice JSON, incluya el headerAuthorization: Bearer <TOKEN>y propague errores HTTP con el mensaje de la API - 4.3 Verificar: Given
OUTLINE_URL/OUTLINE_API_KEYausentes, When se invoca una herramienta, Then se responde con error descriptivo sin panic
5. Herramientas MCP
- 5.1 Implementar
outline_list_collectionscontra/api/collections.listdevolviendoid,nameydescription - 5.2 Implementar
outline_searchcontra/api/documents.searchcon parámetroquery - 5.3 Implementar
outline_get_documentcontra/api/documents.infocon parámetroid, devolviendo título y texto en Markdown - 5.4 Implementar
outline_create_documentcontra/api/documents.createcon parámetrostitle,textycollection_id - 5.5 Registrar las cuatro herramientas en el servidor MCP con sus esquemas de entrada (
mcp.WithString,mcp.Required()) - 5.6 Verificar: Given un cliente MCP conectado por stdio, When se lista
tools/list, Then aparecen las cuatro herramientas con sus esquemas; When se invocaoutline_searchcon query sin coincidencias, Then devuelve lista vacía sin error
6. Auto-update
- 6.1 Implementar
doUpdate: consulta a{GiteaURL}/api/v1/repos/{RepoOwner}/{RepoName}/releases/latesty manejo de errores de red - 6.2 Implementar comparación de versiones (parseo de
vX.Y.Zfrente aVersion; fail-safe si el tag no es parseable) - 6.3 Implementar selección y descarga del asset por convención
outline-mcp_{GOOS}_{GOARCH}[.exe]usandoruntime.GOOS/runtime.GOARCH - 6.4 Aplicar el binario descargado con
selfupdate.Applye informar el resultado - 6.5 Verificar: Given
Versionigual o superior al tag de Gitea, When se ejecutaupdate, Then informa que no hay actualizaciones y no modifica el binario; Given la API de Gitea inaccesible, Then finaliza con error sin tocar el binario
7. Pipeline de release (Gitea Actions)
- 7.1 Crear
.gitea/workflows/release.ymlcon triggeron: push: tags: ['v*']y runnerubuntu-latest - 7.2 Configurar Go 1.22 en el job (
actions/setup-go@v5) - 7.3 Implementar el build con
CGO_ENABLED=0para linux/amd64, darwin/arm64 y windows/amd64, nombrando los artefactosoutline-mcp_{GOOS}_{GOARCH}[.exe]e inyectando-ldflagsconVersion(desdegithub.ref_name),GiteaURL,RepoOwneryRepoName(desde el contexto del repo) - 7.4 Publicar el release en Gitea adjuntando los tres binarios (acción oficial de Gitea o CLI
tea release create) - 7.5 Verificar: Given un push de tag
v0.1.0, When el workflow se ejecuta, Then el release queda publicado en Gitea con los tres assets y el comandoversiondel binario publicado reportav0.1.0