# 读取研究收集历史

标准 URL： https://sosoapi.ai/zh-hans/docs/mcp/research-collection-history-query

`sosoapi_research_collection_history_query`

读取有界限的 UTC 群组观察；未知不等于零。部分 HN 样本不适合用来判断动能或预测。需要 agent:research。

## 配置与传输方式

配置：full

传输方式：stdio、http

选择 core 或 full 以控制客户端显示的工具；这不会变更权限。本地文件上传需要 stdio，无法通过 HTTP 使用。设置 SOSOAPI_OUTPUT_SCHEMAS=1 可在探索结果加入输出schema。无论是否启用此设置，工具皆会返回结构化结果。

## 权限与副作用

注解帮助客户端描述工具。每次调用仍会检查用户身份验证、角色、资源访问和能力授权。

```json
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": true
}
```

`/research-api/collection-history/query` — agent:research; 当前获授权的单一确切来源群组汇总收集历史；收集计数不代表发布量、市场成长、动能或预测

## 输入字段

```json
{
  "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"
    }
  }
}
```

## 结构化输出

此 schema 描述成功工具结果中的 structuredContent。MCP 响应也包含 content，并可能在调用失败时设置 isError。对于发布，请读取帖子的最终结果，不要把获接受的请求或文字响应当作确认。链接的 API 操作说明了权限和重试规则。

```json
{
  "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
}
```

## 工具调用示例

这些示例使用已依schema检查的虚构值。请将 ID 替换为你有权使用的 ID、将媒体替换为已就绪素材，并将日期替换为已确认的发布时间。提交写入前，请检查账号资格。本页不会发送 API 请求。

```json
{
  "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

```json
{
  "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"
    }
  ]
}
```

## 底层 API 操作

- [/research-api/collection-history/query](https://sosoapi.ai/zh-hans/docs/api/research-api-collection-history-query)
