Church Website Editor
Edita tu sitio web de la iglesia con ChatGPT o Claude
Documentación
Referencia para desarrolladores
Church Website Editor MCP server
Un servidor de Model Context Protocol que permite a un asistente de IA editar el sitio web de una iglesia operando directamente sobre su repositorio de GitHub. Escribe commits en la rama predeterminada y se despliega automáticamente a producción vía Vercel en unos 30 segundos. 25 herramientas, GitHub-OAuth limitado a los repositorios propios del llamador.
¿Buscas la versión en lenguaje sencillo? Consulta la guía del pastor.
Conexión
| Endpoint | https://www.elijahdesent.com/api/mcp |
|---|---|
| Transporte | Streamable HTTP (sin estado) |
| Servidor | elijahdesent-crm v0.10.0 |
| Autenticación | OAuth 2.1 — identidad vía GitHub |
| Metadatos de autorización | /.well-known/oauth-authorization-server |
| Metadatos de recurso protegido | /.well-known/oauth-protected-resource |
El endpoint anuncia OAuth 2.1 con registro dinámico de clientes; los documentos de descubrimiento anteriores permiten que un cliente MCP compatible negocie el flujo automáticamente. Los tokens están vinculados a la cuenta de GitHub que tiene acceso al repositorio de la iglesia, por lo que cada llamada se limita a los repositorios que el llamador ya posee.
Añadir como conector remoto
{
"mcpServers": {
"church-website-editor": {
"url": "https://www.elijahdesent.com/api/mcp"
}
}
}
La mayoría de los clientes (Claude, modo desarrollador de ChatGPT, Perplexity) lo añaden a través de su interfaz de conectores — consulta el tutorial de configuración. En la primera conexión, el cliente abre un inicio de sesión de GitHub para autorizar.
Convenciones
repoacepta unnamesimple — el servidor completa el propietario de GitHub del llamador. Usaowner/namesolo para otra organización.- Cada escritura exitosa es un commit en la rama predeterminada. Vercel se despliega automáticamente al hacer push; no hay paso de despliegue separado.
- Prefiere
replace_in_filepara ediciones.edit_filereemplaza el archivo completo y está protegido contra borrados parciales de contenido (allow_shrinkpara anular). - Las herramientas de lectura nunca mutan; las herramientas de commit hacen push al repositorio; las herramientas de estado solo informan del estado.
Herramientas
Conexión y descubrimiento
Establece la identidad y encuentra los repositorios y sitios que el llamador puede tocar.
connection_statusstatus
Confirma que el llamador está autenticado y que el enlace de GitHub está activo. Úsalo para diagnosticar fallos de autenticación.
Sin parámetros.
Devuelve usuario autenticado, estado del enlace de GitHub y el/los sitio(s) de la iglesia vinculados a la cuenta.
list_my_sitesstatus
Lista la(s) iglesia(s) vinculadas al llamador en el CRM, con sus dominios en vivo.
Sin parámetros.
Devuelve array de { church, domain }.
list_reposread
Lista los repositorios de GitHub a los que el llamador puede acceder. Limitado al propietario por defecto.
| Param | Type | Description |
|---|---|---|
| filter | string | Subcadena para filtrar nombres de repositorios (p. ej. 'baptist'). |
Devuelve array de { name, description, default_branch, private }.
search_reposread
Encuentra un repositorio buscando coincidencias tanto en su nombre COMO en su descripción. Más amplio que list_repos (solo nombre) — úsalo cuando sepas de qué trata un sitio pero no el nombre exacto del repositorio.
| Param | Type | Description |
|---|---|---|
| queryreq | string | Texto para buscar coincidencias en el nombre o descripción del repositorio (p. ej. 'baptist', una ciudad, el nombre de un pastor). |
| limit | integer | Cuántas coincidencias devolver, 1–50. Por defecto 20. |
Devuelve repositorios coincidentes, los más recientes primero, cada uno con descripción, visibilidad y última actualización.
get_repo_inforead
Informa de las versiones de frameworks de un repositorio para que las ediciones coincidan con sus convenciones. Llámalo antes de cualquier edición de código no trivial.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
Devuelve versiones de Next.js / React / Tailwind, uso de TypeScript y router (app vs pages).
Lectura de contenido
Navega por el árbol, lee archivos, busca e inventaría imágenes en vivo. Todo de solo lectura.
list_pagesread
Lista el contenido de un directorio. Una ruta vacía lista la raíz del repositorio.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| path | string | Ruta del directorio; cadena vacía para la raíz del repositorio (por defecto). |
| ref | string | Rama, etiqueta o SHA. Por defecto, la rama predeterminada del repositorio. |
Devuelve array de { name, type: 'file' | 'dir' }.
read_fileread
Lee el contenido UTF-8 completo de un archivo. Siempre lee antes de editar.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| pathreq | string | Ruta del archivo dentro del repositorio. |
| ref | string | Rama, etiqueta o SHA. Por defecto, la rama predeterminada del repositorio. |
Devuelve el contenido completo del archivo.
search_contentread
Búsqueda recursiva de contenido (obtiene el árbol y busca en cada archivo de texto) — funciona en repositorios nuevos y sin indexar.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| queryreq | string | Texto a buscar sin distinguir mayúsculas/minúsculas. |
| ref | string | Rama, etiqueta o SHA. Por defecto, la rama predeterminada del repositorio. |
| path_prefix | string | Solo buscar rutas que comiencen con esto (p. ej. 'src/app/'). |
Devuelve hasta 30 archivos coincidentes, cada uno con los números de línea coincidentes.
list_photosread
Inventaría archivos de imagen con sus URLs en vivo exactas. Llámalo antes de apuntar una página a una foto para evitar errores tipográficos de imágenes rotas.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| folder | string | Carpeta desde la que listar. Por defecto 'public' (imágenes servidas por el sitio). |
| ref | string | Rama, etiqueta o SHA. Por defecto, la rama predeterminada del repositorio. |
Devuelve array de imágenes con ruta del repositorio y URL en vivo.
Escritura de contenido
Cada escritura exitosa es un commit en la rama predeterminada, que se despliega automáticamente a producción vía Vercel (~30s).
replace_in_filecommit
Edición dirigida — reemplaza texto exacto. Preferida para cambios pequeños; solo toca lo que especifiques.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| pathreq | string | Ruta del archivo dentro del repositorio. |
| old_stringreq | string | Texto exacto a buscar, incluidos los espacios en blanco. Añade contexto para hacerlo único. |
| new_stringreq | string | Texto de reemplazo. |
| messagereq | string | Mensaje de commit en lenguaje sencillo. |
| branch | string | Rama a la que hacer commit. Por defecto, la rama predeterminada. |
| replace_all | boolean | Reemplazar cada aparición. Por defecto false (debe coincidir exactamente una vez). |
Devuelve confirmación del commit.
edit_filecommit
Crea un archivo nuevo o reemplaza el contenido COMPLETO de un archivo. Tiene una protección contra borrados parciales de contenido.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| pathreq | string | Ruta del archivo dentro del repositorio. |
| contentreq | string | Contenido completo del archivo nuevo (UTF-8). |
| messagereq | string | Mensaje de commit en lenguaje sencillo. |
| branch | string | Rama a la que hacer commit. Por defecto, la rama predeterminada. |
| allow_shrink | boolean | Anula la protección que rechaza escrituras que eliminan >20 líneas Y <60% del tamaño anterior. |
Devuelve confirmación del commit, o un rechazo si se activa la protección contra reducción.
upload_photocommit
Añade una foto/video. Llamado sin data\, devuelve un enlace de subida de un solo uso; las imágenes pequeñas se confirman en el repositorio, los videos y archivos grandes se enrutan automáticamente al almacenamiento alojado.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| pathreq | string | Ubicación de guardado. Usa 'public/.' para imágenes servidas por el sitio. |
| messagereq | string | Mensaje de commit en lenguaje sencillo. |
| data | string | Avanzado — bytes de imagen en base64. Omítelo para obtener un enlace de subida en su lugar. |
| branch | string | Rama a la que hacer commit. Por defecto, la rama predeterminada. |
Devuelve un enlace de subida de un solo uso (por defecto), o una confirmación de commit cuando se proporciona data\.
get_uploaded_photo_urlread
Resuelve dónde aterrizó una subida después de que el usuario haya usado el enlace de upload_photo.
| Param | Type | Description |
|---|---|---|
| tokenreq | string | El enlace de subida (https://.../u/) o el token simple. |
Devuelve HOSTED (URL de almacenamiento permanente), COMMITTED (ruta del repositorio en vivo) o PENDING (aún no subido).
Historial y deshacer
Inspecciona commits y revierte cambios de forma no destructiva.
list_recent_changesread
Lista commits recientes, los más nuevos primero.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| path | string | Limitar a commits que toquen este archivo/directorio. |
| limit | integer | Cuántos devolver, 1–50. Por defecto 15. |
Devuelve array de { short SHA, time, author, message }.
show_changeread
Obtén el mensaje, los archivos tocados y el diff de un commit.
| Param | Type | Description |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o 'name' simple para usar el propietario de GitHub del llamador. |
| shareq | string | SHA del commit (completo o corto). |
Devuelve parche por archivo con líneas añadidas/eliminadas.
revert_changecommit
Deshace un commit creando un commit nuevo que restaura el estado anterior. El commit original permanece en el historial.
| Parámetro | Tipo | Descripción |
|---|---|---|
| reporeq | string | Repositorio como 'owner/name', o solo 'name' para usar el propietario de GitHub del llamante. |
| shareq | string | SHA del commit a revertir. |
| branch | string | Rama sobre la que aplicar la reversión. Por defecto, la rama predeterminada. |
Devuelve la confirmación de la reversión del commit.
Despliegue
Confirma que los cambios llegaron a producción.
check_deploy_statusstatus
Comprueba si los cambios recientes se desplegaron. Descubre automáticamente los sitios del llamante desde el acceso de GitHub.
| Parámetro | Tipo | Descripción |
|---|---|---|
| repo | string | Limitar a un repositorio. Omitir para comprobar todos los sitios del llamante. |
Devuelve el estado de despliegue por sitio; en caso de fallo, las últimas líneas de la salida de compilación.
Dominios personalizados
Adjunta un dominio personalizado a un sitio en Vercel y confirma que apunta correctamente. Limitado a proyectos vinculados a repositorios a los que el llamante puede acceder. El pastor cambia sus servidores de nombres en su registrador; las herramientas nunca tocan el registrador directamente.
connect_domainvercel
Adjunta un dominio personalizado al proyecto de Vercel del llamante y devuelve instrucciones en lenguaje sencillo para apuntar los servidores de nombres del dominio a Vercel (con una alternativa A/CNAME para dominios que alojan correo). Un apex desnudo empareja automáticamente su 'www.'. Se activa una vez que los servidores de nombres se propagan.
| Parámetro | Tipo | Descripción |
|---|---|---|
| domainreq | string | Dominio a conectar, p. ej. 'gracebaptist.org' o 'www.gracebaptist.org'. |
| repo | string | Qué sitio, como 'owner/name' o 'name'. Solo se necesita si el llamante tiene varios sitios. |
Devuelve confirmación más los servidores de nombres de Vercel para configurar en el registrador (desde la API de Vercel, p. ej. ns1/ns2.vercel-dns.com), y un respaldo A/CNAME.
check_domainstatus
Comprueba si los servidores de nombres de un dominio conectado apuntan a Vercel y si el sitio está verificado y en vivo. Cuando está completamente en vivo y el llamante posee exactamente una iglesia, lo registra como live_domain de esa iglesia para que la analítica atribuya el tráfico.
| Parámetro | Tipo | Descripción |
|---|---|---|
| domainreq | string | Dominio a comprobar, p. ej. 'gracebaptist.org'. |
| repo | string | Qué sitio, como 'owner/name' o 'name'. Solo se necesita si el llamante tiene varios sitios. |
Devuelve el estado de los servidores de nombres (actual vs. esperado) + el estado de verificación del sitio; cuando está en vivo, confirmación de que se ha vinculado para la analítica.
redirect_domainvercel
Cambia a dónde apunta un dominio conectado: redirígelo a otro dominio (p. ej. un dominio antiguo o la versión sin www → el sitio principal), o pasa redirect_to 'none' para servir directamente. No se puede encadenar: el destino no debe ser a su vez una redirección.
| Parámetro | Tipo | Descripción |
|---|---|---|
| domainreq | string | El dominio conectado a cambiar, p. ej. 'www.gracebaptist.org'. |
| redirect_to | string | Dominio al que enviar a los visitantes, p. ej. 'gracebaptist.org'. Usa 'none' (u omítelo) para desactivar la redirección. |
| permanent | boolean | Permanente (308) por defecto; false para un 307 temporal. |
| repo | string | Qué sitio, como 'owner/name' o 'name'. Solo se necesita si el llamante tiene varios sitios. |
Devuelve confirmación de la nueva redirección (o de que el dominio ahora sirve directamente). Informa del error de encadenamiento si el destino es a su vez una redirección.
Analítica
Datos de tráfico de solo lectura, con alcance automático a los sitios propios del llamante. Pasa church\ para desambiguar cuando poseen más de uno.
analytics_summaryread
Tráfico de alto nivel en una ventana reciente.
| Parámetro | Tipo | Descripción |
|---|---|---|
| church | string | Nombre de la iglesia o dominio en vivo. |
| days | integer | Ventana en días, 1–90. Por defecto 28. |
Devuelve total de páginas vistas, visitantes únicos (dispositivos), desglose por país y dispositivo.
top_pagesread
Páginas más vistas en una ventana reciente.
| Parámetro | Tipo | Descripción |
|---|---|---|
| church | string | Nombre de la iglesia o dominio en vivo. |
| days | integer | Ventana en días, 1–90. Por defecto 28. |
| limit | integer | Cuántas páginas, 1–50. Por defecto 10. |
Devuelve páginas clasificadas con recuentos de vistas.
top_referrersread
Principales referidores externos (tráfico directo excluido).
| Parámetro | Tipo | Descripción |
|---|---|---|
| church | string | Nombre de la iglesia o dominio en vivo. |
| days | integer | Ventana en días, 1–90. Por defecto 28. |
| limit | integer | Cuántos referidores, 1–50. |
Devuelve referidores clasificados con recuentos.
traffic_by_dayread
Tendencia diaria de páginas vistas para detectar picos y semanas tranquilas.
| Parámetro | Tipo | Descripción |
|---|---|---|
| church | string | Nombre de la iglesia o dominio en vivo. |
| days | integer | Ventana en días, 1–90. Por defecto 14. |
Devuelve páginas vistas por día.
Puntuación
Audita cualquier sitio web de iglesia según la rúbrica de Church Website Score.
score_websiteread
Obtiene la página de inicio y las subpáginas clave de un sitio y devuelve la rúbrica de calificación más el contenido de la página. El llamante (el modelo) hace la puntuación: la herramienta no llama a ninguna IA por sí misma.
| Parámetro | Tipo | Descripción |
|---|---|---|
| urlreq | string | El sitio a puntuar, p. ej. 'gracebaptist.org'. |
Devuelve la rúbrica completa de 6 categorías / 100 puntos y el contenido de la página obtenido.
Construido y mantenido por Pastor Eli (Elijah Desent) · Pastor@elijahdesent.com