Skip to content

Servidor de Proyectos ​

El servidor de proyectos (servers/research/) ofrece gestión estructurada de proyectos con soporte para distintos tipos de proyecto, seguimiento de fuentes, generación de citas APA, salida de bibliografía y registro de backends de datos.

Renombrado desde Servidor de Investigación

Este servidor se llamaba antes "crow-research". El nombre del servidor ahora es crow-projects, y la función de fábrica es createProjectServer (el antiguo nombre createResearchServer sigue funcionando como alias retrocompatible). El gateway lo monta en /projects/mcp (principal) y /research/mcp (alias heredado).

Tipos de proyecto ​

Los proyectos tienen un campo type que determina su propósito:

TipoDescripción
researchProyectos de investigación tradicionales con fuentes, citas y bibliografía (predeterminado)
data_connectorProyectos que se conectan a datos externos a través de backends registrados

El tipo se establece al crear el proyecto y determina qué herramientas y flujos de trabajo son relevantes.

Herramientas ​

crow_create_project ​

Crea un proyecto nuevo.

ParámetroTipoRequeridoDescripción
namestringSíNombre del proyecto
descriptionstringNoDescripción y objetivos del proyecto
tagsstringNoEtiquetas separadas por comas
typestringNoTipo de proyecto: research (predeterminado) o data_connector

crow_list_projects ​

Lista todos los proyectos con un filtro de estado opcional.

ParámetroTipoRequeridoDescripción
statusstringNoFiltrar por estado

crow_update_project ​

Actualiza el nombre, la descripción, el estado o las etiquetas de un proyecto.

ParámetroTipoRequeridoDescripción
idnumberSíID del proyecto
namestringNoNombre nuevo
descriptionstringNoDescripción nueva
statusstringNoEstado nuevo (active, paused, completed, archived)
tagsstringNoEtiquetas nuevas

crow_add_source ​

Agrega una fuente a un proyecto. Genera automáticamente una cita APA si no se proporciona una. Se usa más comúnmente con proyectos de tipo research.

ParámetroTipoRequeridoDescripción
titlestringSíTítulo de la fuente
source_typestringSíTipo (ver la lista de abajo)
project_idnumberNoAsociarla a un proyecto
urlstringNoURL donde se encontró la fuente
authorsstringNoAutor(es) en formato "Last, F. M."
publication_datestringNoFecha de publicación (YYYY-MM-DD o YYYY)
publisherstringNoEditorial o nombre del sitio web
doistringNoDOI (para artículos académicos)
isbnstringNoISBN (para libros)
abstractstringNoResumen (abstract) o descripción breve
content_summarystringNoResumen de los puntos y hallazgos clave
full_textstringNoTexto completo, si está disponible
citation_apastringNoCita APA manual (se autogenera si se omite)
retrieval_methodstringNoCómo se obtuvo la fuente
tagsstringNoEtiquetas separadas por comas
relevance_scorenumberNoQué tan relevante es para el proyecto, 1-10 (predeterminado: 5)

Tipos de fuente: web_article, academic_paper, book, interview, web_search, web_scrape, api_data, document, video, podcast, social_media, government_doc, dataset, other

Busca en la web con la API de Brave Search (servers/shared/brave-search.js, clave BRAVE_API_KEY, límite de 10 segundos). No obtiene ni guarda nada. Cada resultado lleva la marca SNIPPET, not a source: open it with crow_add_source before citing, y los resultados se recortan por entradas completas para que la respuesta quepa en el límite de resultados de voz. Sin clave de API, la herramienta dice que la búsqueda no está configurada y sugiere abrir una URL conocida con crow_add_source.

ParámetroTipoRequeridoDescripción
querystringSíConsulta de búsqueda (hasta 400 caracteres)
countnumberNoNúmero de resultados, 1-10 (predeterminado: 5)

crow_fetch_source ​

Vuelve a abrir la URL de una fuente guardada (requiere la capacidad write_sources en su proyecto). Sirve para reintentar una obtención fallida o actualizar una copia antigua. Consulta Verificar antes de citar.

  • Una fuente sin URL no tiene nada que obtener.
  • Si la obtención falla o no encuentra texto legible, se conserva la copia anterior que tenía texto, y la fuente sigue siendo citable.
  • Si la página no cambió (mismo hash de contenido), solo se actualiza fetched_at.
  • Si la página cambió, el texto nuevo no se guarda mientras haya notas de cita que pasaron su comprobación con el texto anterior, salvo que el propietario pase force: true.
  • Cuando se guarda texto nuevo, se vuelven a comprobar las notas de cita de la fuente, y se quita una verificación quotes_checked si una cita ya no está en la página.
ParámetroTipoRequeridoDescripción
idnumberSíID de la fuente
forcebooleanNoSolo el propietario: reemplaza el texto guardado de la página aunque haya comprobaciones de citas que dependan de él

crow_search_sources ​

Busca fuentes usando búsqueda de texto completo.

ParámetroTipoRequeridoDescripción
querystringSíConsulta de búsqueda
source_typestringNoFiltrar por tipo
project_idnumberNoFiltrar por proyecto
limitnumberNoMáximo de resultados

crow_get_source ​

Obtiene los detalles completos de una fuente específica.

ParámetroTipoRequeridoDescripción
idnumberSíID de la fuente

crow_verify_source ​

Verifica una fuente o quita su verificación. Con quotes_checked, la fuente queda verificada solo si tiene al menos una nota de cita y cada cita aparece en la página que Crow obtuvo. Consulta Verificar una fuente.

ParámetroTipoRequeridoDescripción
idnumberSíID de la fuente
verifiedbooleanNotrue para verificar (predeterminado), false para quitar la verificación
methodstringNoquotes_checked (predeterminado) o manual_owner (solo el propietario; los bots no pueden)
notesstringNoNotas sobre la verificación

crow_list_sources ​

Lista fuentes con filtrado opcional.

ParámetroTipoRequeridoDescripción
project_idnumberNoFiltrar por proyecto
source_typestringNoFiltrar por tipo
verifiedbooleanNoFiltrar por estado de verificación
limitnumberNoMáximo de resultados

crow_add_note ​

Agrega una nota, opcionalmente vinculada a un proyecto o a una fuente.

ParámetroTipoRequeridoDescripción
contentstringSíContenido de la nota
note_typestringNoTipo: note, quote, summary, analysis, question, insight (predeterminado: note)
provenancestringNoDe dónde viene lo que dice la nota: fetched, snippet o derived. Obligatorio en las notas quote y summary; en analysis e insight el valor predeterminado es derived. Consulta Procedencia de las notas
locatorstringNoDónde está en la fuente (página, sección, marca de tiempo)
project_idnumberNoProyecto asociado
source_idnumberNoFuente asociada
titlestringNoTítulo de la nota
tagsstringNoEtiquetas separadas por comas

crow_search_notes ​

Busca notas por contenido.

ParámetroTipoRequeridoDescripción
querystringSíTérminos de búsqueda
project_idnumberNoFiltrar por proyecto
note_typestringNoFiltrar por tipo (note, quote, summary, analysis, question, insight)
limitnumberNoMáximo de resultados (predeterminado: 10)

crow_generate_bibliography ​

Genera una bibliografía APA formateada para un proyecto o un conjunto filtrado de fuentes.

ParámetroTipoRequeridoDescripción
project_idnumberNoGenerar la bibliografía de este proyecto
tagstringNoFiltrar por etiqueta
verified_onlybooleanNoIncluir solo fuentes verificadas (predeterminado: false)

crow_project_stats ​

Obtiene estadísticas sobre los proyectos y el pipeline de investigación. Sin parámetros.

Herramientas de backends de datos ​

Estas herramientas gestionan conexiones de datos externas para proyectos de tipo data_connector.

crow_register_backend ​

Registra un servidor MCP externo como backend de datos.

ParámetroTipoRequeridoDescripción
namestringSíNombre del backend
server_urlstringSíURL del servidor MCP
descriptionstringNoQué datos proporciona este backend

crow_list_backends ​

Lista todos los backends de datos registrados. Sin parámetros.

crow_remove_backend ​

Elimina un backend de datos registrado.

ParámetroTipoRequeridoDescripción
backend_idnumberSíID del backend

crow_backend_schema ​

Obtiene el esquema (las herramientas disponibles) de un backend registrado.

ParámetroTipoRequeridoDescripción
backend_idnumberSíID del backend

Recursos ​

research://projects ​

Devuelve la lista de todos los proyectos.

Generación de citas APA ​

El servidor genera citas APA automáticamente al agregar fuentes. El formato de la cita varía según el tipo de fuente:

  • Artículos académicos: Author (Year). Title. Publisher. DOI/URL
  • Libros: Author (Year). *Title*. Publisher.
  • Artículos web: Author (Year). Title. Site Name. URL
  • Otros tipos: formato APA estándar con los campos disponibles

Verificar antes de citar ​

Crow abre por sí mismo la página de una fuente antes de que esta cuente como citable. Que un bot diga que leyó una página nunca se acepta sin comprobarlo.

Estados de obtención ​

research_sources.fetch_status es uno de:

EstadoSignificado
fetchedCrow abrió la página y guardó su texto legible
fetched_no_textCrow abrió la página pero no encontró texto legible (un PDF, una imagen, una página solo de scripts)
failedCrow no pudo abrir la página; el motivo queda en fetch_error
not_applicableLa fuente no tiene URL (un libro, una entrevista), así que no hay nada que obtener
legacyLa fuente es anterior a esta función; se muestra como "legacy, unchecked"
NULLLa fila llegó de un par, de un recurso compartido o de un clon; aquí nunca se comprobó y no es citable aquí

Una fuente es citable cuando su estado es fetched, fetched_no_text o legacy, o cuando es not_applicable y la dueña o el dueño la verificó a mano (manual_owner). Las bibliografías citan solo fuentes citables e indican cuántas se dejaron fuera; include_unfetched muestra el resto, marcadas [NOT FETCHED: ...].

crow_add_source con una URL obtiene primero la página (con el obtenedor compartido protegido contra SSRF, servers/shared/fetch-page.js) y guarda la URL final, el código HTTP, un hash del contenido y el texto de la página. crow_fetch_source actualiza la copia guardada. Si una actualización no encuentra texto legible, se conserva la copia anterior; y si el texto nuevo rompería una verificación de cita que hoy pasa, se conserva el texto anterior salvo que el propietario pase force: true.

Procedencia de las notas ​

Las notas de cita y de resumen indican de dónde viene la afirmación: fetched (respaldada por una página que Crow abrió), snippet (solo un fragmento de resultados de búsqueda, por lo que aún no se puede citar en el texto) o derived (razonamiento propio de quien escribe). Las notas de análisis y de idea usan derived por defecto. Una nota de cita sobre una fuente obtenida se comprueba contra el texto de la página y registra quote_found (1, 0, o NULL cuando la comprobación no pudo decidir) y un locator. La procedencia, quote_found y locator se quedan en local: están en EXCLUDED_COLUMNS (y se descartan en las filas entrantes) en servers/sharing/instance-sync.js, porque cada uno es un juicio sobre la copia de la página de esta instancia.

Verificar una fuente ​

crow_verify_source registra en verification_method cómo se verificó una fuente:

  • quotes_checked (predeterminado): la fuente necesita al menos una nota de cita, y todas las citas deben aparecer en la página guardada. Si la copia guardada tiene más de 30 días, Crow reabre primero la página y adopta el texto nuevo solo si todas las citas siguen coincidiendo. Si una cita falla más adelante, se borra la verificación quotes_checked; el registro de auditoría lo anota como invalidated.
  • manual_owner: verifica el propietario a mano. Los bots no pueden. Es la única forma de verificar una fuente not_applicable.
  • legacy_flag: la puso una sola vez la migración en filas que ya estaban marcadas como verificadas. Nunca se comprobó contra una página, por eso no se muestra como [V].

Quién es el propietario ​

El servidor de proyectos decide la identidad de quien llama cuando se construye, y el propietario tiene que ser explícito. npm run mcp-config marca la entrada generada de crow-projects con CROW_ACTOR_KIND=owner; una configuración de cliente escrita a mano necesita la misma variable de entorno para verificar a mano por stdio. Los montajes del gateway iniciados con --no-auth, los bots, las instancias pares y quien no dice nada nunca son el propietario. Las llamadas HTTP de un bot a los montajes router, projects, research y tools del gateway las bloquea la guarda de URL de pi-bots, así que un bot no puede llegar a la vía del propietario a través del gateway.

Coincidencia de citas ​

servers/research/quote-match.js decide si una cita está en la página. Una cita cuenta como encontrada solo cuando su redacción exacta aparece en la página. Crow nunca reconstruye una cita editada.

  • Normalización: ambos lados se igualan del mismo modo: Unicode NFKC, espacios, guiones suaves y caracteres de ancho cero, mayúsculas y minúsculas, y los estilos de comillas, guiones y apóstrofos. En la cita se recortan las comillas exteriores y un . , ; : final; ? y ! se conservan, porque cambian lo que dice la frase.
  • Límites de palabra: la coincidencia debe empezar y terminar en un límite de palabra. Las palabras con guion y los números como 2.5 o 1,500 cuentan como palabras completas.
  • Dónde busca: primero el texto de Readability y después el cuerpo completo de la página. El resultado indica body cuando la coincidencia salió del cuerpo completo.
  • Ediciones permitidas en una cita: [sic], [citation needed] y un solo corchete con una letra mayúscula al inicio de una palabra ([I]t). Cualquier puntos suspensivos u otro corchete deja la comprobación en "no se pudo comprobar exactamente": cita el pasaje sin cortes o avisa al propietario. Las marcas de nota como [3] se ignoran solo en el lado de la página.
  • No se pudo comprobar: una cita de más de 2,000 caracteres, de menos de 4 caracteres, o con demasiadas posiciones posibles en la página. Una página cortada por el límite de tamaño y sin coincidencia también es "no se pudo comprobar", nunca "no está en la página".
  • Atribución: primero se prueba la cita completa. Solo si no se encuentra se descarta una cola final tras un guion o tras las comillas de cierre, y solo cuando la cola parece un nombre: dos o más palabras con mayúscula inicial, que no empiecen por palabras como The, Never o Not, con un , Cargo opcional. Pon a quien habla o la publicación en tu propia frase, no dentro de la cita.
  • Resultado: encontrada (1), no encontrada (0) o no se pudo comprobar (NULL).

Límites conocidos: la coincidencia por subcadena no distingue cuando la propia página niega la frase citada, ni cuando la coincidencia viene de elementos de la página como un menú o un pie (el resultado indica entonces body).

Released under the MIT License.