[{'Text': '```\n{\n  "body": "## Context\\n\\nPart of the ops-meta agent project. See parent issue: Point-Topic/pt-research-app#24\\n\\nThe agent automates monthly broadband speed checks against operator websites. This issue covers the 6 MCP tools the agent needs, all of which are thin wrappers over existing utilities in `pt-research-app`.\\n\\n---\\n\\n## Tools to implement\\n\\nAll tools connect to MongoDB via `DATABASE_URL` and S3 via `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` / `WEB_ARCHIVES_BUCKET` (same env vars as pt-research-app).\\n\\n### `get_active_operator_metas`\\n\\\\`\\\\`\\\\`ts\\ninput:  { tech?: string, hasWebSource?: boolean }\\noutput: OperatorMeta[]  // id, operator, tech, ispId, fastestDown, fastestUp, webSource, validFrom\\n\\\\`\\\\`\\\\`\\n\\n### `get_operator_meta_history`\\n\\\\`\\\\`\\\\`ts\\ninput:  { operator: string }\\noutput: OperatorMeta[]  // all versions, sorted validFrom desc\\n\\\\`\\\\`\\\\`\\n\\n### `create_ops_meta_snapshot`\\nCloses current active record (`validTo = validFrom of new`), inserts new record. Wraps `opsMeta.server.ts:createSnapshot`.\\n\\\\`\\\\`\\\\`ts\\ninput:  { id, fastestDown, fastestUp, notes?, validFrom? }\\noutput: { newRecordId }\\n\\\\`\\\\`\\\\`\\n\\n### `flag_operator_for_review`\\nAppends to `internalNotes`. No snapshot created.\\n\\\\`\\\\`\\\\`ts\\ninput:  { id, note }\\noutput: { updated: true }\\n\\\\`\\\\`\\\\`\\n\\n### `save_evidence_snapshot`\\nUploads rendered HTML + extracted text to S3, creates `WebSourceSnapshot` record with AI analysis fields. Calls `getOrCreateMonitor` internally.\\n\\\\`\\\\`\\\\`ts\\ninput:  { operatorMetaId, html, text, aiRelevant, aiSummary, aiSuggestedDown?, aiSuggestedUp?, aiNote? }\\noutput: { snapshotId, s3HtmlKey, s3TextKey }\\n\\\\`\\\\`\\\\`\\nS3 key pattern: `{envPrefix}/agent/{sanitizedOperatorName}/{upcMonth}/{timestamp}.html`\\n\\n### `update_operator_web_source`\\n\\\\`\\\\`\\\\`ts\\ninput:  { id, webSource }\\noutput: { updated: true }\\n\\\\`\\\\`\\\\`\\n\\n---\\n\\n## Notes\\n\\n- `save_evidence_snapshot` stores rendered HTML (from `fetch_url` / Playwright), not true MHTML. Stored in `s3MhtmlKey` field with that caveat documented. Screenshot approach is post-MVP upgrade.\\n- `create_ops_meta_snapshot` must set `updatedBy = \\"agent\\"`\\n- `validFrom` defaults to `upcReportedAt` app variable if not supplied",\n  "createdAt": "2026-04-18T09:07:18Z",\n  "state": "OPEN",\n  "title": "Ops Meta Agent: implement 6 MCP tools for ops-meta review loop",\n  "updatedAt": "2026-04-18T09:13:18Z"\n}\n```'}]