Herramienta MCP
Leer el historial de recopilación de investigación
sosoapi_research_collection_history_queryLeer observaciones acotadas de cohortes en UTC; desconocido no es cero. Las muestras parciales de HN no sirven para determinar impulso ni pronósticos. Requiere agent:research.
Leer en MarkdownPerfiles y transportes
Perfiles: full · Transportes: stdio, http
Elige core o full para controlar qué herramientas ve tu cliente; no cambia sus permisos. La carga de archivos locales requiere stdio y no está disponible por HTTP. Establece SOSOAPI_OUTPUT_SCHEMAS=1 para incluir esquemas de salida en la detección. Las herramientas devuelven resultados estructurados con o sin esa opción.
Permisos y efectos secundarios
Las anotaciones ayudan a los clientes a describir una herramienta. Cada llamada sigue comprobando la autenticación, el rol, el acceso al recurso y los permisos de capacidades del usuario.
{
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}- /research-api/collection-history/query: agent:research · historial agregado de recopilación autorizado actualmente de una cohorte exacta de fuentes; los recuentos recopilados no son volumen de publicaciones, crecimiento del mercado, impulso ni pronósticos
Campos de entrada
Obligatorio significa obligatorio dentro del objeto principal y la rama elegida. Un campo secundario obligatorio no convierte en obligatorio un objeto principal opcional. Las reglas y nombres de campos siguientes se copian del contrato.
| Campo / rama | Tipo / obligatorio | Restricciones |
|---|---|---|
$ | objectObligatorio en el objeto principal |
|
workspace_id | stringObligatorio en el objeto principal |
|
project_id | stringObligatorio en el objeto principal |
|
project_revision | integerObligatorio en el objeto principal |
|
corpus_snapshot_id | stringObligatorio en el objeto principal |
|
bucket | stringOpcional / elemento |
|
since | stringObligatorio en el objeto principal |
|
until | stringObligatorio en el objeto principal |
|
JSON Schema completo
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"format": "uuid"
},
"project_revision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"corpus_snapshot_id": {
"type": "string",
"format": "uuid"
},
"bucket": {
"type": "string",
"enum": [
"hour",
"day"
]
},
"since": {
"$ref": "#/$defs/s0"
},
"until": {
"$ref": "#/$defs/s0"
}
},
"required": [
"workspace_id",
"project_id",
"project_revision",
"corpus_snapshot_id",
"since",
"until"
],
"additionalProperties": false,
"$defs": {
"s0": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
}
}
}Salida estructurada
Este esquema describe structuredContent en un resultado exitoso de herramienta. La respuesta MCP también incluye content y puede establecer isError si falla una llamada. Para publicación, consulta el resultado final de la publicación en vez de considerar una solicitud aceptada o una respuesta de texto como confirmación. La operación API enlazada explica los permisos y las reglas de reintento.
Obligatorio significa obligatorio dentro del objeto principal y la rama elegida. Un campo secundario obligatorio no convierte en obligatorio un objeto principal opcional. Las reglas y nombres de campos siguientes se copian del contrato.
| Campo / rama | Tipo / obligatorio | Restricciones |
|---|---|---|
$ | objectObligatorio en el objeto principal |
|
workspace_id | stringObligatorio en el objeto principal |
|
project_id | stringObligatorio en el objeto principal |
|
project_revision | integerObligatorio en el objeto principal |
|
corpus_snapshot_id | stringObligatorio en el objeto principal |
|
bucket | stringObligatorio en el objeto principal |
|
since | stringObligatorio en el objeto principal |
|
until | stringObligatorio en el objeto principal |
|
generated_at | stringObligatorio en el objeto principal |
|
status | stringObligatorio en el objeto principal |
|
reason | string | nullObligatorio en el objeto principal | — |
reasonanyOf 1 | stringObligatorio en el objeto principal |
|
reasonanyOf 2 | nullObligatorio en el objeto principal | — |
cohort | object | nullObligatorio en el objeto principal | — |
cohortanyOf 1 | objectObligatorio en el objeto principal |
|
cohort.sourceanyOf 1 | stringObligatorio en el objeto principal |
|
cohort.query_revisionanyOf 1 | integerObligatorio en el objeto principal |
|
cohort.generationanyOf 1 | integerObligatorio en el objeto principal |
|
cohort.method_versionanyOf 1 | stringObligatorio en el objeto principal |
|
cohort.selected_listening_refsanyOf 1 | integerObligatorio en el objeto principal |
|
cohort.excluded_selected_itemsanyOf 1 | integerObligatorio en el objeto principal |
|
cohort.scopeanyOf 1 | stringObligatorio en el objeto principal |
|
cohortanyOf 2 | nullObligatorio en el objeto principal | — |
method_version | stringObligatorio en el objeto principal |
|
time_basis | stringObligatorio en el objeto principal |
|
deduplication | stringObligatorio en el objeto principal |
|
count_meaning | stringObligatorio en el objeto principal |
|
momentum_eligible | booleanObligatorio en el objeto principal |
|
forecast_eligible | booleanObligatorio en el objeto principal |
|
qualification_reason | stringObligatorio en el objeto principal |
|
observed_bins | integerObligatorio en el objeto principal |
|
unknown_bins | integerObligatorio en el objeto principal |
|
bins | arrayObligatorio en el objeto principal |
|
bins[] | objectOpcional / elemento |
|
bins[].start | stringObligatorio en el objeto principal |
|
bins[].end | stringObligatorio en el objeto principal |
|
bins[].period_partial | booleanObligatorio en el objeto principal | — |
bins[].state | stringObligatorio en el objeto principal |
|
bins[].counts | object | nullObligatorio en el objeto principal | — |
bins[].countsanyOf 1 | objectObligatorio en el objeto principal |
|
bins[].counts.source_itemsanyOf 1 | integerObligatorio en el objeto principal |
|
bins[].counts.matched_itemsanyOf 1 | integerObligatorio en el objeto principal |
|
bins[].counts.removed_itemsanyOf 1 | integerObligatorio en el objeto principal |
|
bins[].counts.unavailable_itemsanyOf 1 | integerObligatorio en el objeto principal |
|
bins[].countsanyOf 2 | nullObligatorio en el objeto principal | — |
bins[].runs | objectObligatorio en el objeto principal |
|
bins[].runs.total | integerObligatorio en el objeto principal |
|
bins[].runs.completed | integerObligatorio en el objeto principal |
|
bins[].runs.successful | integerObligatorio en el objeto principal |
|
bins[].runs.succeeded | integerObligatorio en el objeto principal |
|
bins[].runs.partial | integerObligatorio en el objeto principal |
|
bins[].runs.failed | integerObligatorio en el objeto principal |
|
bins[].runs.cancelled | integerObligatorio en el objeto principal |
|
bins[].runs.pending | integerObligatorio en el objeto principal |
|
bins[].source_windows | object | nullObligatorio en el objeto principal | — |
bins[].source_windowsanyOf 1 | objectObligatorio en el objeto principal |
|
bins[].source_windows.sinceanyOf 1 | stringObligatorio en el objeto principal |
|
bins[].source_windows.untilanyOf 1 | stringObligatorio en el objeto principal |
|
bins[].source_windows.distinct_windowsanyOf 1 | integerObligatorio en el objeto principal |
|
bins[].source_windowsanyOf 2 | nullObligatorio en el objeto principal | — |
bins[].gaps | arrayObligatorio en el objeto principal |
|
bins[].gaps[] | stringOpcional / elemento |
|
bins[].coverage | stringObligatorio en el objeto principal |
|
JSON Schema completo
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"format": "uuid"
},
"project_revision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"corpus_snapshot_id": {
"type": "string",
"format": "uuid"
},
"bucket": {
"type": "string",
"enum": [
"hour",
"day"
]
},
"since": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"until": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"generated_at": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"status": {
"type": "string",
"enum": [
"available",
"insufficient_history",
"not_applicable",
"incomparable"
]
},
"reason": {
"anyOf": [
{
"type": "string",
"enum": [
"no_listening_sources",
"mixed_sources",
"mixed_cohorts",
"mixed_methods",
"method_unavailable",
"unsupported_method",
"no_completed_observations",
"history_limit"
]
},
{
"type": "null"
}
]
},
"cohort": {
"anyOf": [
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "hacker_news"
},
"query_revision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"generation": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"method_version": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"selected_listening_refs": {
"type": "integer",
"minimum": 1,
"maximum": 500
},
"excluded_selected_items": {
"type": "integer",
"minimum": 0,
"maximum": 499
},
"scope": {
"type": "string",
"const": "selected_listening_stream_cohort"
}
},
"required": [
"source",
"query_revision",
"generation",
"method_version",
"selected_listening_refs",
"excluded_selected_items",
"scope"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"method_version": {
"type": "string",
"const": "listening-collection-history/v1"
},
"time_basis": {
"type": "string",
"const": "collection_completed_at_or_requested_at"
},
"deduplication": {
"type": "string",
"const": "latest_observation_per_source_per_bin"
},
"count_meaning": {
"type": "string",
"const": "bounded_collection_observations"
},
"momentum_eligible": {
"type": "boolean",
"const": false
},
"forecast_eligible": {
"type": "boolean",
"const": false
},
"qualification_reason": {
"type": "string",
"enum": [
"hn_partial_overlapping_sample_unqualified",
"no_qualified_cohort"
]
},
"observed_bins": {
"type": "integer",
"minimum": 0,
"maximum": 24
},
"unknown_bins": {
"type": "integer",
"minimum": 0,
"maximum": 24
},
"bins": {
"maxItems": 24,
"type": "array",
"items": {
"type": "object",
"properties": {
"start": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"end": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"period_partial": {
"type": "boolean"
},
"state": {
"type": "string",
"enum": [
"observed",
"unknown"
]
},
"counts": {
"anyOf": [
{
"type": "object",
"properties": {
"source_items": {
"type": "integer",
"minimum": 0,
"maximum": 10240
},
"matched_items": {
"type": "integer",
"minimum": 0,
"maximum": 10240
},
"removed_items": {
"type": "integer",
"minimum": 0,
"maximum": 10240
},
"unavailable_items": {
"type": "integer",
"minimum": 0,
"maximum": 10240
}
},
"required": [
"source_items",
"matched_items",
"removed_items",
"unavailable_items"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"runs": {
"type": "object",
"properties": {
"total": {
"type": "integer",
"minimum": 0,
"maximum": 512
},
"completed": {
"type": "integer",
"minimum": 0,
"maximum": 512
},
"successful": {
"type": "integer",
"minimum": 0,
"maximum": 512
},
"succeeded": {
"type": "integer",
"minimum": 0,
"maximum": 512
},
"partial": {
"type": "integer",
"minimum": 0,
"maximum": 512
},
"failed": {
"type": "integer",
"minimum": 0,
"maximum": 512
},
"cancelled": {
"type": "integer",
"minimum": 0,
"maximum": 512
},
"pending": {
"type": "integer",
"minimum": 0,
"maximum": 512
}
},
"required": [
"total",
"completed",
"successful",
"succeeded",
"partial",
"failed",
"cancelled",
"pending"
],
"additionalProperties": false
},
"source_windows": {
"anyOf": [
{
"type": "object",
"properties": {
"since": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"until": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"distinct_windows": {
"type": "integer",
"minimum": 1,
"maximum": 512
}
},
"required": [
"since",
"until",
"distinct_windows"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"gaps": {
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"enum": [
"unobserved",
"incomplete_collection",
"failed_collection",
"cancelled_collection",
"partial_period"
]
}
},
"coverage": {
"type": "string",
"const": "partial_indexed_sample"
}
},
"required": [
"start",
"end",
"period_partial",
"state",
"counts",
"runs",
"source_windows",
"gaps",
"coverage"
],
"additionalProperties": false
}
}
},
"required": [
"workspace_id",
"project_id",
"project_revision",
"corpus_snapshot_id",
"bucket",
"since",
"until",
"generated_at",
"status",
"reason",
"cohort",
"method_version",
"time_basis",
"deduplication",
"count_meaning",
"momentum_eligible",
"forecast_eligible",
"qualification_reason",
"observed_bins",
"unknown_bins",
"bins"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Ejemplo de llamada a herramienta
Estos ejemplos usan valores ficticios comprobados con los esquemas. Sustituye los IDs por otros autorizados, los archivos multimedia por recursos listos y las fechas por tu hora de publicación confirmada. Comprueba la elegibilidad de la cuenta antes de enviar una escritura. Esta página no envía solicitudes API.
{
"name": "sosoapi_research_collection_history_query",
"arguments": {
"workspace_id": "11111111-1111-4111-8111-111111111111",
"project_id": "30000000-0000-4000-8000-000000000001",
"project_revision": 1,
"corpus_snapshot_id": "30000000-0000-4000-8000-000000000002",
"bucket": "day",
"since": "2026-11-01T00:00:00Z",
"until": "2026-11-02T00:00:00Z"
}
}structuredContent
{
"workspace_id": "11111111-1111-4111-8111-111111111111",
"project_id": "30000000-0000-4000-8000-000000000001",
"project_revision": 1,
"corpus_snapshot_id": "30000000-0000-4000-8000-000000000002",
"bucket": "day",
"since": "2026-11-01T00:00:00Z",
"until": "2026-11-02T00:00:00Z",
"generated_at": "2026-11-03T00:00:00Z",
"status": "insufficient_history",
"reason": "no_completed_observations",
"cohort": {
"source": "hacker_news",
"query_revision": 1,
"generation": 1,
"method_version": "hn-indexed-literal-sample/v1",
"selected_listening_refs": 1,
"excluded_selected_items": 0,
"scope": "selected_listening_stream_cohort"
},
"method_version": "listening-collection-history/v1",
"time_basis": "collection_completed_at_or_requested_at",
"deduplication": "latest_observation_per_source_per_bin",
"count_meaning": "bounded_collection_observations",
"momentum_eligible": false,
"forecast_eligible": false,
"qualification_reason": "hn_partial_overlapping_sample_unqualified",
"observed_bins": 0,
"unknown_bins": 1,
"bins": [
{
"start": "2026-11-01T00:00:00Z",
"end": "2026-11-02T00:00:00Z",
"period_partial": false,
"state": "unknown",
"counts": null,
"runs": {
"total": 0,
"completed": 0,
"successful": 0,
"succeeded": 0,
"partial": 0,
"failed": 0,
"cancelled": 0,
"pending": 0
},
"source_windows": null,
"gaps": [
"unobserved"
],
"coverage": "partial_indexed_sample"
}
]
}