このMCPでできること
Tracks website health, SEO rankings, AI-answer visibility, visitor behavior, and prioritized optimization actions.
ツール
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'prompts'], 'properties': {'prompts': {'type': 'array', 'items': {'type': 'object', 'required': ['prompt'], 'properties': {'stage': {'enum': ['tofu', 'mofu', 'bofu'], 'type': 'string', 'description': 'Funnel stage of the question'}, 'format': {'enum': ['keyword', 'conversational', 'list'], 'type': 'string', 'description': 'How the question is phrased'}, 'prompt': {'type': 'string', 'maxLength': 500, 'minLength': 3, 'description': 'The question as a visitor would ask it, e.g. "best seo tool for agents"'}}}, 'maxItems': 100, 'minItems': 1, 'description': 'Array of objects, one per prompt: [{ prompt: "best seo tool for agents", stage: "bofu" }]'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['added'], 'properties': {'added': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Rows inserted; duplicates are skipped'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'terms'], 'properties': {'terms': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'The search phrases to track, as plain strings, 1-200 per call: ["seo tool", "rank tracker"]'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['added'], 'properties': {'added': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Rows inserted; duplicates are skipped'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 255, 'minLength': 3, 'description': 'Domain of the site you are working in, e.g. example.com'}, 'brandName': {'type': 'string', 'maxLength': 120, 'description': 'How the brand is written, when it differs from the domain'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'domain', 'brandName', 'created'], 'properties': {'note': {'type': 'string', 'description': 'Present only on the free preview: what it includes and what it does not'}, 'plan': {'type': 'string', 'const': 'none', 'description': 'Present only when there is no subscription: this account is on the free preview'}, 'domain': {'type': 'string', 'description': 'The normalized domain that is tracked'}, 'created': {'type': 'boolean', 'description': 'true if this call registered the site, false if it was already tracked'}, 'brandName': {'type': ['string', 'null']}, 'projectId': {'type': 'string', 'description': 'Pass this to every other tool'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'force': {'type': 'boolean', 'description': 'Re-check even though the last check is under 20 hours old. Bills again; leave unset unless a same-day re-check is genuinely needed'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'jobId', 'prompts', 'pollWith'], 'properties': {'hint': {'type': 'string', 'description': 'Present only with nothing_to_check: the tool to call before checking again'}, 'jobId': {'type': ['string', 'null'], 'description': 'Job id, null when this call was deduplicated into an already-queued run'}, 'status': {'enum': ['queued', 'already_queued', 'nothing_to_check', 'fresh'], 'type': 'string', 'description': 'queued when this call created the job. already_queued when the same job for this project was enqueued moments ago and this call was deduplicated: the work is coming and nothing extra was billed. nothing_to_check when the project tracks nothing for this run: no job was enqueued, nothing was billed, and hint names the tool to call first. fresh when the last check is under 20 hours old: nothing was enqueued or billed, read the existing result now, and pass force: true only if a re-check today is genuinely needed.'}, 'prompts': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Active GEO prompts the run will ask, once on every configured engine; 0 queues nothing'}, 'pollWith': {'type': 'string', 'const': 'geo_summary', 'description': 'Call geo_summary once the worker has finished the run'}, 'lastCheckedAt': {'type': ['string', 'null'], 'description': "ISO time of the project's newest check of this kind, null when never checked"}, 'nextCheckAfter': {'type': 'string', 'description': 'Present only with fresh: when an unforced check will run again'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'force': {'type': 'boolean', 'description': 'Re-check even though the last check is under 20 hours old. Bills again; leave unset unless a same-day re-check is genuinely needed'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'jobId', 'keywords', 'pollWith'], 'properties': {'hint': {'type': 'string', 'description': 'Present only with nothing_to_check: the tool to call before checking again'}, 'jobId': {'type': ['string', 'null'], 'description': 'Job id, null when this call was deduplicated into an already-queued run'}, 'status': {'enum': ['queued', 'already_queued', 'nothing_to_check', 'fresh'], 'type': 'string', 'description': 'queued when this call created the job. already_queued when the same job for this project was enqueued moments ago and this call was deduplicated: the work is coming and nothing extra was billed. nothing_to_check when the project tracks nothing for this run: no job was enqueued, nothing was billed, and hint names the tool to call first. fresh when the last check is under 20 hours old: nothing was enqueued or billed, read the existing result now, and pass force: true only if a re-check today is genuinely needed.'}, 'keywords': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Tracked keywords the run will check, one rank_check of quota each; 0 queues nothing'}, 'pollWith': {'type': 'string', 'const': 'rank_history', 'description': 'Call rank_history once the worker has finished the run'}, 'lastCheckedAt': {'type': ['string', 'null'], 'description': "ISO time of the project's newest check of this kind, null when never checked"}, 'nextCheckAfter': {'type': 'string', 'description': 'Present only with fresh: when an unforced check will run again'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'actionId'], 'properties': {'actionId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Action id (a UUID) from the id field of a list_actions row, an exampleActionIds entry of a group, or get_next_work'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'projectId', 'refreshId', 'type', 'priority', 'title', 'rationale', 'targetUrl', 'payload', 'status', 'claimedByApiKeyId', 'claimedAt', 'doneAt', 'note', 'commitSha', 'createdAt', 'updatedAt'], 'properties': {'id': {'type': 'string'}, 'note': {'type': ['string', 'null'], 'description': 'Why the agent closed this: required on dismissal, optional on completion'}, 'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Category of problem'}, 'title': {'type': 'string'}, 'doneAt': {'anyOf': [{'type': 'string', 'description': 'When the action was closed, completed or dismissed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string'}, 'payload': {'type': 'object', 'description': 'Evidence; shape varies by type', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'notFound': {'type': 'array', 'items': {'type': 'string'}, 'description': 'actionIds that named no open finding of this project: already closed, or not ours'}, 'priority': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': '1 is most urgent, 5 least'}, 'claimedAt': {'anyOf': [{'type': 'string', 'description': 'When the action was claimed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'commitSha': {'type': ['string', 'null'], 'description': 'The commit the agent reported when completing this, if it reported one'}, 'createdAt': {'type': 'string', 'description': 'When the action was filed as an ISO 8601 timestamp'}, 'projectId': {'type': 'string'}, 'rationale': {'type': 'string', 'description': 'What was measured and why it matters'}, 'refreshId': {'type': ['string', 'null'], 'description': 'The action-list refresh that filed this action, if any'}, 'targetUrl': {'type': ['string', 'null'], 'description': 'The affected URL, if the problem is page-level'}, 'updatedAt': {'type': 'string', 'description': 'When the action last changed as an ISO 8601 timestamp'}, 'alsoClosed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Further findings closed by this call's actionIds, beyond the one reported here"}, 'claimedByApiKeyId': {'type': ['string', 'null']}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'actionId'], 'properties': {'note': {'type': 'string', 'maxLength': 500, 'description': 'What you changed, in one line. Shown to the owner alongside the finding.'}, 'commit': {'type': 'string', 'pattern': '^[0-9a-f]{7,64}$', 'description': 'The commit that carries the change, so the fix can be traced and reverted.'}, 'actionId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Action id (a UUID) from the id field of a list_actions row, an exampleActionIds entry of a group, or get_next_work'}, 'actionIds': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 500, 'description': 'Further findings the same change closed. Only include what this commit actually fixed; ids that are not open findings of this project come back in notFound.'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'projectId', 'refreshId', 'type', 'priority', 'title', 'rationale', 'targetUrl', 'payload', 'status', 'claimedByApiKeyId', 'claimedAt', 'doneAt', 'note', 'commitSha', 'createdAt', 'updatedAt'], 'properties': {'id': {'type': 'string'}, 'note': {'type': ['string', 'null'], 'description': 'Why the agent closed this: required on dismissal, optional on completion'}, 'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Category of problem'}, 'title': {'type': 'string'}, 'doneAt': {'anyOf': [{'type': 'string', 'description': 'When the action was closed, completed or dismissed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string'}, 'payload': {'type': 'object', 'description': 'Evidence; shape varies by type', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'notFound': {'type': 'array', 'items': {'type': 'string'}, 'description': 'actionIds that named no open finding of this project: already closed, or not ours'}, 'priority': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': '1 is most urgent, 5 least'}, 'claimedAt': {'anyOf': [{'type': 'string', 'description': 'When the action was claimed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'commitSha': {'type': ['string', 'null'], 'description': 'The commit the agent reported when completing this, if it reported one'}, 'createdAt': {'type': 'string', 'description': 'When the action was filed as an ISO 8601 timestamp'}, 'projectId': {'type': 'string'}, 'rationale': {'type': 'string', 'description': 'What was measured and why it matters'}, 'refreshId': {'type': ['string', 'null'], 'description': 'The action-list refresh that filed this action, if any'}, 'targetUrl': {'type': ['string', 'null'], 'description': 'The affected URL, if the problem is page-level'}, 'updatedAt': {'type': 'string', 'description': 'When the action last changed as an ISO 8601 timestamp'}, 'alsoClosed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Further findings closed by this call's actionIds, beyond the one reported here"}, 'claimedByApiKeyId': {'type': ['string', 'null']}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'actionId', 'reason'], 'properties': {'reason': {'type': 'string', 'maxLength': 500, 'minLength': 15, 'description': "Why this finding does not apply to this site, in your own words. Shown to the owner, so a bare 'not applicable' is not useful."}, 'actionId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Action id (a UUID) from the id field of a list_actions row, an exampleActionIds entry of a group, or get_next_work'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'projectId', 'refreshId', 'type', 'priority', 'title', 'rationale', 'targetUrl', 'payload', 'status', 'claimedByApiKeyId', 'claimedAt', 'doneAt', 'note', 'commitSha', 'createdAt', 'updatedAt'], 'properties': {'id': {'type': 'string'}, 'note': {'type': ['string', 'null'], 'description': 'Why the agent closed this: required on dismissal, optional on completion'}, 'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Category of problem'}, 'title': {'type': 'string'}, 'doneAt': {'anyOf': [{'type': 'string', 'description': 'When the action was closed, completed or dismissed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string'}, 'payload': {'type': 'object', 'description': 'Evidence; shape varies by type', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'notFound': {'type': 'array', 'items': {'type': 'string'}, 'description': 'actionIds that named no open finding of this project: already closed, or not ours'}, 'priority': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': '1 is most urgent, 5 least'}, 'claimedAt': {'anyOf': [{'type': 'string', 'description': 'When the action was claimed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'commitSha': {'type': ['string', 'null'], 'description': 'The commit the agent reported when completing this, if it reported one'}, 'createdAt': {'type': 'string', 'description': 'When the action was filed as an ISO 8601 timestamp'}, 'projectId': {'type': 'string'}, 'rationale': {'type': 'string', 'description': 'What was measured and why it matters'}, 'refreshId': {'type': ['string', 'null'], 'description': 'The action-list refresh that filed this action, if any'}, 'targetUrl': {'type': ['string', 'null'], 'description': 'The affected URL, if the problem is page-level'}, 'updatedAt': {'type': 'string', 'description': 'When the action last changed as an ISO 8601 timestamp'}, 'alsoClosed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Further findings closed by this call's actionIds, beyond the one reported here"}, 'claimedByApiKeyId': {'type': ['string', 'null']}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'days': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'Window in days, counted back from now, 1-365; default 30, e.g. 90 for a quarter'}, 'view': {'enum': ['brief', 'full'], 'type': 'string', 'description': 'brief (the default) is the rates and the top competitor domains. full adds the competitor URLs and fan-out queries per engine, which is far larger.'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'actionId'], 'properties': {'actionId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Action id (a UUID) from the id field of a list_actions row, an exampleActionIds entry of a group, or get_next_work'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'projectId', 'refreshId', 'type', 'priority', 'title', 'rationale', 'targetUrl', 'payload', 'status', 'claimedByApiKeyId', 'claimedAt', 'doneAt', 'note', 'commitSha', 'createdAt', 'updatedAt'], 'properties': {'id': {'type': 'string'}, 'note': {'type': ['string', 'null'], 'description': 'Why the agent closed this: required on dismissal, optional on completion'}, 'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Category of problem'}, 'title': {'type': 'string'}, 'doneAt': {'anyOf': [{'type': 'string', 'description': 'When the action was closed, completed or dismissed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string'}, 'payload': {'type': 'object', 'description': 'Evidence; shape varies by type', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'notFound': {'type': 'array', 'items': {'type': 'string'}, 'description': 'actionIds that named no open finding of this project: already closed, or not ours'}, 'priority': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': '1 is most urgent, 5 least'}, 'claimedAt': {'anyOf': [{'type': 'string', 'description': 'When the action was claimed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'commitSha': {'type': ['string', 'null'], 'description': 'The commit the agent reported when completing this, if it reported one'}, 'createdAt': {'type': 'string', 'description': 'When the action was filed as an ISO 8601 timestamp'}, 'projectId': {'type': 'string'}, 'rationale': {'type': 'string', 'description': 'What was measured and why it matters'}, 'refreshId': {'type': ['string', 'null'], 'description': 'The action-list refresh that filed this action, if any'}, 'targetUrl': {'type': ['string', 'null'], 'description': 'The affected URL, if the problem is page-level'}, 'updatedAt': {'type': 'string', 'description': 'When the action last changed as an ISO 8601 timestamp'}, 'alsoClosed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Further findings closed by this call's actionIds, beyond the one reported here"}, 'claimedByApiKeyId': {'type': ['string', 'null']}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'days': {'type': 'integer', 'maximum': 90, 'minimum': 1, 'description': 'Window in days, counted back from now, 1-90; default 7, e.g. 30 for a month'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'query'], 'properties': {'query': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'A query from list_opportunities, copied exactly (case and spacing are normalised)'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'opportunity', 'questionsToAnswer', 'holders', 'holderPages', 'wordCountBand', 'existingPages', 'linkFrom', 'missing', 'evidence'], 'properties': {'query': {'type': 'string', 'description': 'The tracked query this brief is about, as it is stored'}, 'holders': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'host', 'position', 'engine', 'count'], 'properties': {'url': {'type': 'string'}, 'host': {'type': 'string'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Checks or runs in the window in which it held the query'}, 'engine': {'type': ['string', 'null'], 'description': 'Engine that cited it; null for a keyword'}, 'position': {'type': ['number', 'null'], 'description': 'SERP position; null for an AI answer'}}, 'additionalProperties': False}, 'description': 'The pages holding this query now'}, 'missing': {'type': 'object', 'required': ['schemaTypes', 'page'], 'properties': {'page': {'type': 'boolean', 'description': 'True when nothing measured covers this query at all'}, 'schemaTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Types at least two holders carry and no page of the site does'}}, 'additionalProperties': False}, 'evidence': {'type': 'object', 'required': ['crawlId', 'checkIds', 'runs', 'windowDays', 'engines', 'keywordId', 'promptId', 'holderFetchedAt'], 'properties': {'runs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'crawlId': {'type': ['string', 'null']}, 'engines': {'type': 'array', 'items': {'type': 'string'}}, 'checkIds': {'type': 'array', 'items': {'type': 'string'}}, 'promptId': {'type': ['string', 'null']}, 'keywordId': {'type': ['string', 'null']}, 'windowDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'holderFetchedAt': {'type': 'array', 'items': {'type': 'string', 'description': 'When a holder page was measured as an ISO 8601 timestamp'}}}, 'additionalProperties': False}, 'linkFrom': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'inboundLinks'], 'properties': {'url': {'type': 'string'}, 'inboundLinks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': "The site's own pages with the most inbound internal links that overlap the query"}, 'holderPages': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'statusCode', 'wordCount', 'schemaTypes', 'contentHash', 'fetchedAt', 'error'], 'properties': {'url': {'type': 'string'}, 'error': {'type': ['string', 'null'], 'description': 'Why no measurement was taken, when none was'}, 'fetchedAt': {'type': 'string', 'description': 'When this page was last measured as an ISO 8601 timestamp'}, 'wordCount': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'statusCode': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'HTTP status; null when nothing answered'}, 'contentHash': {'type': ['string', 'null'], 'description': "sha256 of the page's visible text"}, 'schemaTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'JSON-LD @type values found on the page'}}, 'additionalProperties': False}, 'description': "Those pages as measured through the crawler's own guard, cached for 7 days, at most three per brief. Counts, types, a hash and a status; never their text."}, 'opportunity': {'type': 'object', 'required': ['query', 'kind', 'demand', 'demandBasis', 'holder', 'ownPosition', 'ownShare', 'holderStrength', 'coverage', 'gap', 'evidence', 'gapFormula'], 'properties': {'gap': {'type': 'number', 'description': 'Computed by gapFormula; the sort key'}, 'kind': {'enum': ['keyword', 'prompt', 'fanout'], 'type': 'string', 'description': 'keyword: a tracked search term. prompt: a tracked question asked of AI answer engines. fanout: a sub-question an engine issued while answering a tracked prompt.'}, 'query': {'type': 'string', 'description': 'The keyword, prompt or sub-question, as it was measured'}, 'demand': {'type': 'number', 'description': 'Comparable within a kind only; demandBasis says what it counts'}, 'holder': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'host', 'position', 'engine', 'count'], 'properties': {'url': {'type': 'string'}, 'host': {'type': 'string'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Checks or runs in the window in which it held the query'}, 'engine': {'type': ['string', 'null'], 'description': 'Engine that cited it; null for a keyword'}, 'position': {'type': ['number', 'null'], 'description': 'SERP position; null for an AI answer'}}, 'additionalProperties': False}, 'description': 'The pages measured holding this query, strongest first'}, 'coverage': {'type': 'object', 'required': ['state', 'pages'], 'properties': {'pages': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'wordCount', 'matchedIn'], 'properties': {'url': {'type': 'string'}, 'matchedIn': {'enum': ['title', 'h1', 'ranking'], 'type': 'string', 'description': 'Where the head terms were found, or that the page ranks for the query'}, 'wordCount': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'state': {'enum': ['none', 'partial', 'held'], 'type': 'string', 'description': "held: a page of the site already ranks or is cited for it. partial: a page carries the query's head terms. none: nothing measured covers it."}}, 'description': 'What the site already has for this query, from the latest finished crawl', 'additionalProperties': False}, 'evidence': {'type': 'object', 'required': ['checkIds', 'crawlId', 'runs', 'windowDays', 'engines', 'keywordId', 'promptId'], 'properties': {'runs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'crawlId': {'type': ['string', 'null']}, 'engines': {'type': 'array', 'items': {'type': 'string'}}, 'checkIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rank_check or geo_check rows the counts came from'}, 'promptId': {'type': ['string', 'null']}, 'keywordId': {'type': ['string', 'null']}, 'windowDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'ownShare': {'type': 'number', 'description': 'The share of the query the site already holds, per gapFormula'}, 'gapFormula': {'type': 'string', 'description': 'The exact arithmetic behind gap'}, 'demandBasis': {'type': 'string'}, 'ownPosition': {'type': ['number', 'null'], 'description': "The site's best search position over the window. Always null for prompt and fanout rows: an AI answer has no rank, only a frequency, which is ownShare."}, 'holderStrength': {'type': 'number', 'description': 'The share of checks or runs the strongest holder held'}}, 'description': 'The queue row for this query', 'additionalProperties': False}, 'existingPages': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'wordCount', 'matchedIn', 'schemaTypes', 'openIssues'], 'properties': {'url': {'type': 'string'}, 'matchedIn': {'enum': ['title', 'h1'], 'type': 'string', 'description': "Where the query's head terms were found"}, 'wordCount': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'openIssues': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Rule ids still open on this page'}, 'schemaTypes': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'description': 'Pages of the latest crawl that already speak to this query'}, 'wordCountBand': {'anyOf': [{'type': 'object', 'required': ['min', 'max'], 'properties': {'max': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'min': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Min and max word count across the measured holder pages'}, 'questionsToAnswer': {'type': 'array', 'items': {'type': 'object', 'required': ['query', 'engines', 'count'], 'properties': {'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Sightings across those engines'}, 'query': {'type': 'string', 'description': 'A sub-question an engine issued, as it issued it'}, 'engines': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'description': 'Sub-questions the engines actually issued while answering the prompt(s) this query belongs to, seen at least twice. Measured, not generated.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'How many to take on now. Defaults to 5.'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mode', 'items', 'remaining', 'withheldByCooldown', 'standbyUntil', 'quotaWarnings'], 'properties': {'mode': {'enum': ['propose', 'commit'], 'type': 'string', 'description': 'What this workspace expects you to do with a fix: propose leaves the change for a human to accept, commit means land it yourself.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['importance', 'action', 'sameFix'], 'properties': {'action': {'type': 'object', 'required': ['id', 'projectId', 'refreshId', 'type', 'priority', 'title', 'rationale', 'targetUrl', 'payload', 'status', 'claimedByApiKeyId', 'claimedAt', 'doneAt', 'note', 'commitSha', 'createdAt', 'updatedAt'], 'properties': {'id': {'type': 'string'}, 'note': {'type': ['string', 'null'], 'description': 'Why the agent closed this: required on dismissal, optional on completion'}, 'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Category of problem'}, 'title': {'type': 'string'}, 'doneAt': {'anyOf': [{'type': 'string', 'description': 'When the action was closed, completed or dismissed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string'}, 'payload': {'type': 'object', 'description': 'Evidence; shape varies by type', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'priority': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': '1 is most urgent, 5 least'}, 'claimedAt': {'anyOf': [{'type': 'string', 'description': 'When the action was claimed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'commitSha': {'type': ['string', 'null'], 'description': 'The commit the agent reported when completing this, if it reported one'}, 'createdAt': {'type': 'string', 'description': 'When the action was filed as an ISO 8601 timestamp'}, 'projectId': {'type': 'string'}, 'rationale': {'type': 'string', 'description': 'What was measured and why it matters'}, 'refreshId': {'type': ['string', 'null'], 'description': 'The action-list refresh that filed this action, if any'}, 'targetUrl': {'type': ['string', 'null'], 'description': 'The affected URL, if the problem is page-level'}, 'updatedAt': {'type': 'string', 'description': 'When the action last changed as an ISO 8601 timestamp'}, 'claimedByApiKeyId': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'sameFix': {'type': 'object', 'required': ['key', 'ruleId', 'fixScope', 'count', 'pages', 'morePages', 'actionIds', 'samePages'], 'properties': {'key': {'type': 'string', 'description': 'The audit rule, or the action type when there is none'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Open findings of this kind, this one included: the blast radius'}, 'pages': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Their pages, this one first'}, 'ruleId': {'type': ['string', 'null']}, 'fixScope': {'enum': ['page', 'template', 'site'], 'type': 'string', 'description': 'How findings of this rule usually go: page is writing that belongs to one page, template is markup a shared layout emits, site is about the origin. It describes the rule, not your repository — you are the one who knows.'}, 'actionIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Pass to complete_action as actionIds to close the whole set with one note and one commit.'}, 'morePages': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Pages beyond those listed'}, 'samePages': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Other kinds of finding standing on exactly the same pages. They are separate edits, so they are separate entries, but they are one visit to each page rather than three.'}}, 'description': 'The other open findings that are the same piece of work. One entry can stand for many pages.', 'additionalProperties': False}, 'importance': {'type': 'number', 'description': "Why this is in front: severity weighted by the page's measured traffic"}}, 'additionalProperties': False}, 'description': 'What to work on now, most important first, one entry per kind of finding rather than one per finding. Empty when there is nothing to do.'}, 'remaining': {'type': 'number', 'description': 'Open findings not covered by these entries; call again when done with them'}, 'standbyUntil': {'type': ['string', 'null'], 'description': 'ISO time to sleep until, set only when there is nothing to do. The next scheduled audit is what produces new findings.'}, 'quotaWarnings': {'type': 'array', 'items': {'type': 'object', 'required': ['metric', 'limit', 'used', 'exhaustsOn', 'daysEarly'], 'properties': {'used': {'type': 'number'}, 'limit': {'type': 'number'}, 'metric': {'type': 'string'}, 'daysEarly': {'type': 'number'}, 'exhaustsOn': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'description': 'Metrics this workspace will spend before the month resets, at the current rate. Nothing breaks when one runs out: the scheduled audits stop until it resets. Tell the owner rather than working around it.'}, 'withheldByCooldown': {'type': 'number', 'description': 'Findings held back because their page was fixed recently and nothing new has been measured on it since'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'maxLength': 2048, 'description': 'Full url of one page, e.g. https://example.com/guide'}, 'days': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'Window in days, default 90'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url', 'days', 'events'], 'properties': {'url': {'type': 'string', 'description': 'The page the timeline is for, as it was asked for'}, 'days': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Window the timeline covers'}, 'events': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['kind', 'at', 'crawlId', 'statusCode', 'wordCount', 'contentHash', 'schemaTypes', 'h1Count', 'canonical', 'issueCount', 'changed'], 'properties': {'at': {'type': 'string', 'description': 'When the crawl finished as an ISO 8601 timestamp'}, 'kind': {'type': 'string', 'const': 'crawl'}, 'changed': {'type': 'boolean', 'description': 'Whether the visible text differs from the previous crawl in the window. False for the first crawl, and for a page crawled before the hash was recorded.'}, 'crawlId': {'type': 'string'}, 'h1Count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'canonical': {'type': ['string', 'null']}, 'wordCount': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'issueCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'statusCode': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'contentHash': {'type': ['string', 'null'], 'description': "sha256 of the page's visible text"}, 'schemaTypes': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'at', 'keywordId', 'term', 'position'], 'properties': {'at': {'type': 'string', 'description': 'When the position was sampled as an ISO 8601 timestamp'}, 'kind': {'type': 'string', 'const': 'rank_check'}, 'term': {'type': 'string', 'description': 'The tracked keyword, as it is stored'}, 'position': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'keywordId': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'at', 'engine', 'promptId', 'prompt'], 'properties': {'at': {'type': 'string', 'description': 'When the engine was asked as an ISO 8601 timestamp'}, 'kind': {'type': 'string', 'const': 'geo_check'}, 'engine': {'type': 'string'}, 'prompt': {'type': 'string', 'description': 'The tracked prompt, as it is stored'}, 'promptId': {'type': 'string'}}, 'additionalProperties': False}]}, 'description': 'One row per measurement, newest first'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'path'], 'properties': {'days': {'type': 'integer', 'maximum': 90, 'minimum': 1, 'description': 'Window in days, counted back from now, 1-90; default 7'}, 'path': {'type': 'string', 'maxLength': 200, 'description': 'Page path exactly as recorded, e.g. "/pricing": no scheme, host or query string (query strings are dropped when visits are recorded). "/pricing" and "/pricing/" are different pages, so copy the path from get_behavior_digest'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'productSummary', 'valueProposition', 'audience', 'marketCountry', 'marketLanguage', 'competitors', 'techStack', 'detectedStack', 'profileSource', 'completed', 'completedAt', 'missing'], 'properties': {'missing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Profile fields still empty; the strategy tools refuse while this is non-empty'}, 'audience': {'type': ['string', 'null'], 'description': 'Who buys it'}, 'completed': {'type': 'boolean', 'description': 'true once productSummary, valueProposition and audience are all filled in'}, 'projectId': {'type': 'string'}, 'techStack': {'type': ['string', 'null'], 'description': 'What the site is built with, as declared; the audit prefers it over detectedStack'}, 'competitors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tracked competitor hostnames, at most 5'}, 'completedAt': {'anyOf': [{'type': 'string', 'description': 'When the profile was first complete as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'detectedStack': {'type': ['string', 'null'], 'description': 'What the latest crawl recognised from the HTML, or null when nothing matched'}, 'marketCountry': {'type': 'string', 'description': 'Two-letter country the checks are run for, e.g. us'}, 'profileSource': {'type': ['string', 'null'], 'description': 'Where the texts came from, when the owner did not write them'}, 'marketLanguage': {'type': 'string', 'description': 'Two-letter language, e.g. en'}, 'productSummary': {'type': ['string', 'null'], 'description': 'What the product is, as the customer wrote it'}, 'valueProposition': {'type': ['string', 'null'], 'description': 'Why someone picks it'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'domain', 'plan', 'complete', 'next', 'steps'], 'properties': {'next': {'anyOf': [{'type': 'object', 'required': ['step', 'done', 'tool', 'detail'], 'properties': {'done': {'type': 'boolean'}, 'step': {'type': 'string'}, 'tool': {'type': ['string', 'null'], 'description': 'The tool that completes it; null when it happens outside MCP'}, 'detail': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The first step still open; call its tool'}, 'plan': {'type': 'string', 'description': 'The workspace plan; "none" is the free preview, where only run_audit runs'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['step', 'done', 'tool', 'detail'], 'properties': {'done': {'type': 'boolean'}, 'step': {'type': 'string'}, 'tool': {'type': ['string', 'null'], 'description': 'The tool that completes it; null when it happens outside MCP'}, 'detail': {'type': 'string'}}, 'additionalProperties': False}}, 'domain': {'type': 'string'}, 'complete': {'type': 'boolean'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Only actions of this category'}, 'view': {'enum': ['grouped', 'rows'], 'type': 'string', 'description': 'grouped (default) or rows; rows is the default when ruleId or type is given'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Rows per page, default 50'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows to skip, from nextOffset'}, 'ruleId': {'type': 'string', 'maxLength': 64, 'description': "Only actions filed from this audit rule, e.g. missing_title (a group's key)"}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string', 'description': 'Which actions to return; default open. open: not yet taken; claimed: taken by an agent with claim_action; done: closed with complete_action; dismissed: closed with dismiss_action and a reason'}, 'verbose': {'type': 'boolean', 'description': 'Include bookkeeping fields on each row; default false'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'priorityScale', 'status', 'total'], 'properties': {'view': {'enum': ['grouped', 'rows'], 'type': 'string'}, 'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Actions matching the status and filters'}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'type', 'ruleId', 'priority', 'count', 'rationale', 'measured', 'examples', 'moreNotShown'], 'properties': {'key': {'type': 'string', 'description': 'Pass as ruleId (or, when ruleId is null, as type) for the rows'}, 'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Category of problem'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'ruleId': {'type': ['string', 'null']}, 'examples': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'targetUrl', 'evidence'], 'properties': {'id': {'type': 'string'}, 'evidence': {'type': 'object', 'description': "This example's own measurements", 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': ['number', 'boolean']}}, 'targetUrl': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'measured': {'type': 'object', 'description': 'Each numeric measurement across the group, as the range it spans', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'required': ['min', 'max'], 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}}, 'additionalProperties': False}}, 'priority': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "The group's most urgent priority; 1 is most urgent"}, 'rationale': {'type': 'string', 'description': "The first item's rationale; the others differ in their numbers"}, 'moreNotShown': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Items in the group beyond the examples'}}, 'additionalProperties': False}, 'description': 'The grouped view'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string'}, 'actions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'ruleId', 'priority', 'title', 'rationale', 'targetUrl', 'payload', 'status', 'note', 'lastSeenAt'], 'properties': {'id': {'type': 'string'}, 'note': {'type': ['string', 'null'], 'description': 'Why the agent closed this: required on dismissal, optional on completion'}, 'type': {'enum': ['fix_title', 'fix_meta_description', 'fix_heading', 'fix_broken_links', 'add_canonical', 'add_structured_data', 'improve_content', 'create_content', 'geo_gap', 'allow_ai_crawler', 'ssr_content', 'refresh_content', 'add_evidence', 'restructure_sections', 'cover_fanout_query', 'third_party_placement', 'claim_review_profile', 'fix_intent_mismatch', 'improve_landing_page', 'fix_friction', 'review_indexing', 'improve_speed', 'add_internal_links', 'add_sitemap', 'review_crawler_access', 'other'], 'type': 'string', 'description': 'Category of problem'}, 'title': {'type': 'string'}, 'doneAt': {'anyOf': [{'type': 'string', 'description': 'When the action was closed, completed or dismissed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'ruleId': {'type': ['string', 'null'], 'description': 'The audit rule that filed it, when one did'}, 'status': {'enum': ['open', 'claimed', 'done', 'dismissed'], 'type': 'string'}, 'payload': {'type': 'object', 'description': 'Evidence; shape varies by type', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'priority': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': '1 is most urgent, 5 least'}, 'claimedAt': {'anyOf': [{'type': 'string', 'description': 'When the action was claimed as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'createdAt': {'type': 'string', 'description': 'When the action was filed as an ISO 8601 timestamp'}, 'projectId': {'type': 'string'}, 'rationale': {'type': 'string', 'description': 'What was measured and why it matters'}, 'refreshId': {'type': ['string', 'null'], 'description': 'The action-list refresh that filed this action, if any'}, 'targetUrl': {'type': ['string', 'null'], 'description': 'The affected URL, if the problem is page-level'}, 'updatedAt': {'type': 'string', 'description': 'When the action last changed as an ISO 8601 timestamp'}, 'lastSeenAt': {'type': 'string', 'description': 'When a run last measured this problem; its rationale and payload are from that run as an ISO 8601 timestamp'}, 'claimedByApiKeyId': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'description': 'The rows view, one page'}, 'nextOffset': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'Pass as offset for the next page; null on the last one'}, 'priorityScale': {'type': 'string'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['keywords'], 'properties': {'keywords': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'term', 'country', 'language', 'createdAt', 'metric', 'rank'], 'properties': {'id': {'type': 'string', 'description': 'Keyword id, pass as keywordId to rank_history'}, 'rank': {'anyOf': [{'type': 'object', 'required': ['position', 'foundUrl', 'checkedAt', 'aiOverviewPresent', 'aiOverviewCited'], 'properties': {'foundUrl': {'type': ['string', 'null']}, 'position': {'type': ['number', 'null']}, 'checkedAt': {'type': 'string', 'description': 'When the rank was checked as an ISO 8601 timestamp'}, 'aiOverviewCited': {'type': 'boolean'}, 'aiOverviewPresent': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Latest rank check, null until the monitor has run'}, 'term': {'type': 'string'}, 'metric': {'anyOf': [{'type': 'object', 'required': ['volume', 'cpc', 'difficulty', 'fetchedAt'], 'properties': {'cpc': {'type': ['number', 'null']}, 'volume': {'type': ['number', 'null']}, 'fetchedAt': {'type': 'string', 'description': 'When the metric was fetched as an ISO 8601 timestamp'}, 'difficulty': {'type': ['number', 'null']}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Latest keyword metrics, null until the monitor has run'}, 'country': {'type': 'string'}, 'language': {'type': 'string'}, 'createdAt': {'type': 'string', 'description': 'When the keyword was added as an ISO 8601 timestamp'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'kind': {'enum': ['keyword', 'prompt', 'fanout'], 'type': 'string', 'description': 'Return only rows of this kind; omit for all three'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Rows to return, default 50'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gapFormula', 'windowDays', 'opportunities'], 'properties': {'gapFormula': {'type': 'string', 'description': 'The exact arithmetic behind gap, and the sort order'}, 'windowDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Rolling window every count in a row is measured over'}, 'opportunities': {'type': 'array', 'items': {'type': 'object', 'required': ['query', 'kind', 'demand', 'demandBasis', 'holder', 'ownPosition', 'ownShare', 'holderStrength', 'coverage', 'gap', 'evidence'], 'properties': {'gap': {'type': 'number', 'description': 'Computed by gapFormula; the sort key'}, 'kind': {'enum': ['keyword', 'prompt', 'fanout'], 'type': 'string', 'description': 'keyword: a tracked search term. prompt: a tracked question asked of AI answer engines. fanout: a sub-question an engine issued while answering a tracked prompt.'}, 'query': {'type': 'string', 'description': 'The keyword, prompt or sub-question, as it was measured'}, 'demand': {'type': 'number', 'description': 'Comparable within a kind only; demandBasis says what it counts'}, 'holder': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'host', 'position', 'engine', 'count'], 'properties': {'url': {'type': 'string'}, 'host': {'type': 'string'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Checks or runs in the window in which it held the query'}, 'engine': {'type': ['string', 'null'], 'description': 'Engine that cited it; null for a keyword'}, 'position': {'type': ['number', 'null'], 'description': 'SERP position; null for an AI answer'}}, 'additionalProperties': False}, 'description': 'The pages measured holding this query, strongest first'}, 'coverage': {'type': 'object', 'required': ['state', 'pages'], 'properties': {'pages': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'wordCount', 'matchedIn'], 'properties': {'url': {'type': 'string'}, 'matchedIn': {'enum': ['title', 'h1', 'ranking'], 'type': 'string', 'description': 'Where the head terms were found, or that the page ranks for the query'}, 'wordCount': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'state': {'enum': ['none', 'partial', 'held'], 'type': 'string', 'description': "held: a page of the site already ranks or is cited for it. partial: a page carries the query's head terms. none: nothing measured covers it."}}, 'description': 'What the site already has for this query, from the latest finished crawl', 'additionalProperties': False}, 'evidence': {'type': 'object', 'required': ['checkIds', 'crawlId', 'runs', 'windowDays', 'engines', 'keywordId', 'promptId'], 'properties': {'runs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'crawlId': {'type': ['string', 'null']}, 'engines': {'type': 'array', 'items': {'type': 'string'}}, 'checkIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rank_check or geo_check rows the counts came from'}, 'promptId': {'type': ['string', 'null']}, 'keywordId': {'type': ['string', 'null']}, 'windowDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'ownShare': {'type': 'number', 'description': 'The share of the query the site already holds, per gapFormula'}, 'demandBasis': {'type': 'string'}, 'ownPosition': {'type': ['number', 'null'], 'description': "The site's best search position over the window. Always null for prompt and fanout rows: an AI answer has no rank, only a frequency, which is ownShare."}, 'holderStrength': {'type': 'number', 'description': 'The share of checks or runs the strongest holder held'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projects'], 'properties': {'projects': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'domain', 'createdAt'], 'properties': {'id': {'type': 'string', 'description': 'Project id, pass as projectId to every other tool'}, 'domain': {'type': 'string'}, 'createdAt': {'type': 'string', 'description': 'When the project was created as an ISO 8601 timestamp'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'days': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'Window in days, default 30'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['windowDays', 'thresholds', 'regressions'], 'properties': {'thresholds': {'type': 'object', 'required': ['rankDropPlaces', 'citationMinRuns', 'wordCountDropRatio'], 'properties': {'rankDropPlaces': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'citationMinRuns': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'wordCountDropRatio': {'type': 'number'}}, 'description': 'The exact floors a movement has to clear to be reported', 'additionalProperties': False}, 'windowDays': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Window both halves of every comparison come from'}, 'regressions': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['kind', 'keywordId', 'query', 'before', 'after', 'stoppedRanking', 'drop', 'foundUrls'], 'properties': {'drop': {'type': 'number', 'description': 'Places lost; a keyword that stopped ranking sorts above every slide'}, 'kind': {'type': 'string', 'const': 'rank'}, 'after': {'type': 'object', 'required': ['bestPosition', 'runs', 'from', 'to', 'checkIds'], 'properties': {'to': {'type': 'string', 'description': 'Newest check in the window as an ISO 8601 timestamp'}, 'from': {'type': 'string', 'description': 'Oldest check in the window as an ISO 8601 timestamp'}, 'runs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'checkIds': {'type': 'array', 'items': {'type': 'string'}}, 'bestPosition': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'query': {'type': 'string'}, 'before': {'type': 'object', 'required': ['bestPosition', 'runs', 'from', 'to', 'checkIds'], 'properties': {'to': {'type': 'string', 'description': 'Newest check in the window as an ISO 8601 timestamp'}, 'from': {'type': 'string', 'description': 'Oldest check in the window as an ISO 8601 timestamp'}, 'runs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'checkIds': {'type': 'array', 'items': {'type': 'string'}}, 'bestPosition': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'foundUrls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The urls that ranked in the earlier window'}, 'keywordId': {'type': 'string'}, 'stoppedRanking': {'type': 'boolean', 'description': 'True when it ranked in the earlier window and does not now'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'promptId', 'query', 'engine', 'before', 'after', 'drop', 'citedUrls'], 'properties': {'drop': {'type': 'number', 'description': 'Points of citation rate lost, 0 to 1'}, 'kind': {'type': 'string', 'const': 'citation'}, 'after': {'type': 'object', 'required': ['rate', 'runs', 'from', 'to', 'checkIds'], 'properties': {'to': {'type': 'string', 'description': 'Newest run in the window as an ISO 8601 timestamp'}, 'from': {'type': 'string', 'description': 'Oldest run in the window as an ISO 8601 timestamp'}, 'rate': {'type': 'number', 'description': "Share of the window's runs that cited the site, 0 to 1"}, 'runs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'checkIds': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'query': {'type': 'string'}, 'before': {'type': 'object', 'required': ['rate', 'runs', 'from', 'to', 'checkIds'], 'properties': {'to': {'type': 'string', 'description': 'Newest run in the window as an ISO 8601 timestamp'}, 'from': {'type': 'string', 'description': 'Oldest run in the window as an ISO 8601 timestamp'}, 'rate': {'type': 'number', 'description': "Share of the window's runs that cited the site, 0 to 1"}, 'runs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'checkIds': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'engine': {'type': 'string', 'description': 'Engines are never blended; each is its own row'}, 'promptId': {'type': 'string'}, 'citedUrls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The urls cited in the earlier window'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'url', 'reasons', 'before', 'after', 'linkedTo', 'drop'], 'properties': {'url': {'type': 'string'}, 'drop': {'type': 'number', 'description': 'The share of its words the page lost, 0 when it lost none'}, 'kind': {'type': 'string', 'const': 'page'}, 'after': {'type': 'object', 'required': ['crawlId', 'at', 'wordCount', 'h1Count', 'contentHash'], 'properties': {'at': {'type': 'string', 'description': 'When that crawl finished as an ISO 8601 timestamp'}, 'crawlId': {'type': 'string'}, 'h1Count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'wordCount': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'contentHash': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'before': {'type': 'object', 'required': ['crawlId', 'at', 'wordCount', 'h1Count', 'contentHash'], 'properties': {'at': {'type': 'string', 'description': 'When that crawl finished as an ISO 8601 timestamp'}, 'crawlId': {'type': 'string'}, 'h1Count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'wordCount': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'contentHash': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'reasons': {'type': 'array', 'items': {'enum': ['word_count', 'h1', 'content_hash'], 'type': 'string'}, 'description': 'word_count: it lost at least 30% of its words. h1: it lost every h1. content_hash: its text changed, reported only because something measured fell with it.'}, 'linkedTo': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'query'], 'properties': {'kind': {'enum': ['rank', 'citation'], 'type': 'string'}, 'query': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'The rank or citation regressions measured on this same page'}}, 'additionalProperties': False}]}, 'description': 'Sorted by kind, then by the size of the drop'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'keywordId'], 'properties': {'days': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'How many days back to sample, default 30'}, 'keywordId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Keyword id (a UUID) from the id field of list_keywords'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['samples', 'status'], 'properties': {'status': {'enum': ['no_checks_yet', 'ok'], 'type': 'string', 'description': 'no_checks_yet when this keyword has never been rank-checked, so an empty samples list means nothing has been measured; call check_rankings. ok when it has been checked at least once, so an empty samples list means no check landed inside the requested window.'}, 'samples': {'type': 'array', 'items': {'type': 'object', 'required': ['checkedAt', 'position', 'foundUrl', 'aiOverviewPresent', 'aiOverviewCited'], 'properties': {'foundUrl': {'type': ['string', 'null']}, 'position': {'type': ['number', 'null'], 'description': 'null means not found in the top 30 results, the depth every check reads'}, 'checkedAt': {'type': 'string', 'description': 'When the position was sampled as an ISO 8601 timestamp'}, 'aiOverviewCited': {'type': 'boolean'}, 'aiOverviewPresent': {'type': 'boolean'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'jobId', 'trigger', 'pollWith'], 'properties': {'jobId': {'type': ['string', 'null'], 'description': 'Job id, null when this call was deduplicated into an already-queued run'}, 'status': {'enum': ['queued', 'already_queued'], 'type': 'string', 'description': 'queued when this call created the job. already_queued when the same job for this project was enqueued moments ago and this call was deduplicated: the work is coming and nothing extra was billed.'}, 'trigger': {'type': 'string', 'const': 'manual', 'description': 'How the refresh was triggered; always manual over MCP'}, 'pollWith': {'type': 'string', 'const': 'list_actions', 'description': 'Call list_actions once the worker has finished the run'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'domain', 'removed'], 'properties': {'domain': {'type': 'string'}, 'removed': {'type': 'boolean', 'description': 'true if the site was being tracked; false if it already was not'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'wait': {'type': 'boolean', 'description': 'true holds the call until the crawl finishes, for at most 60 seconds; default false returns at once'}, 'maxPages': {'type': 'integer', 'maximum': 5000, 'minimum': 1, 'description': 'Pages to crawl at most, 1-5000; default 100, e.g. 250 for a larger site'}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['crawlId', 'status', 'maxPagesUsed'], 'properties': {'note': {'type': 'string', 'description': 'Present only on the free preview: what the crawl produces and where to read it'}, 'error': {'type': 'string', 'description': 'Why the crawl failed, when it did'}, 'status': {'enum': ['queued', 'running', 'finished', 'failed'], 'type': 'string'}, 'crawlId': {'type': 'string', 'description': 'Poll get_site_health for the result'}, 'maxPages': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only on the free preview: pages this crawl will cover, after clamping'}, 'maxPagesUsed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The page cap this crawl runs with'}, 'pagesCrawled': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present when the call waited'}, 'retryAfterSeconds': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present while the crawl is still running: wait this long, then get_site_health'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'audience': {'type': 'string', 'maxLength': 300, 'description': "Who buys it, in the owner's words"}, 'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project id (a UUID) from add_project or list_projects, e.g. "0190f7a2-8c1e-7d3a-9b4f-2e6c1a5d8f30"'}, 'techStack': {'anyOf': [{'enum': ['nextjs', 'nuxt', 'sveltekit', 'remix', 'astro', 'gatsby', 'react_spa', 'vue_spa', 'angular', 'wordpress', 'shopify', 'webflow', 'wix', 'squarespace', 'framer', 'static', 'other'], 'type': 'string'}, {'type': 'null'}], 'description': "What the site is built with; read it from the codebase (package.json, config files). The audit uses it to tell a framework's by-design behaviour from a problem, from the next run_audit on. null clears it and falls back to detectedStack."}, 'competitors': {'type': 'array', 'items': {'type': 'string', 'maxLength': 255}, 'maxItems': 5, 'description': 'Hostnames, e.g. ["rival.com"]. Replaces the stored list; an empty array clears it.'}, 'marketCountry': {'type': 'string', 'maxLength': 2, 'description': 'Two lowercase letters, e.g. "us". Defaults to us.'}, 'profileSource': {'type': 'string', 'maxLength': 200, 'description': 'Where the three texts came from if the owner did not write them, e.g. "the site\'s meta description and homepage hero". Empty string clears it.'}, 'marketLanguage': {'type': 'string', 'maxLength': 2, 'description': 'Two lowercase letters, e.g. "en". Defaults to en.'}, 'productSummary': {'type': 'string', 'maxLength': 600, 'description': 'What the product is, one paragraph. Send an empty string to clear it.'}, 'valueProposition': {'type': 'string', 'maxLength': 300, 'description': 'Why someone picks it over the alternatives'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'productSummary', 'valueProposition', 'audience', 'marketCountry', 'marketLanguage', 'competitors', 'techStack', 'detectedStack', 'profileSource', 'completed', 'completedAt', 'missing'], 'properties': {'missing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Profile fields still empty; the strategy tools refuse while this is non-empty'}, 'audience': {'type': ['string', 'null'], 'description': 'Who buys it'}, 'completed': {'type': 'boolean', 'description': 'true once productSummary, valueProposition and audience are all filled in'}, 'projectId': {'type': 'string'}, 'techStack': {'type': ['string', 'null'], 'description': 'What the site is built with, as declared; the audit prefers it over detectedStack'}, 'competitors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tracked competitor hostnames, at most 5'}, 'completedAt': {'anyOf': [{'type': 'string', 'description': 'When the profile was first complete as an ISO 8601 timestamp'}, {'type': 'null'}]}, 'detectedStack': {'type': ['string', 'null'], 'description': 'What the latest crawl recognised from the HTML, or null when nothing matched'}, 'marketCountry': {'type': 'string', 'description': 'Two-letter country the checks are run for, e.g. us'}, 'profileSource': {'type': ['string', 'null'], 'description': 'Where the texts came from, when the owner did not write them'}, 'marketLanguage': {'type': 'string', 'description': 'Two-letter language, e.g. en'}, 'productSummary': {'type': ['string', 'null'], 'description': 'What the product is, as the customer wrote it'}, 'valueProposition': {'type': ['string', 'null'], 'description': 'Why someone picks it'}}, 'additionalProperties': False}
最近のツール変更
類似のMCPサーバー
SharksAPI.AI
Provides marketing analytics and actions across GA4, Search Console, Google Ads, social channels, SEO, WordPress, and marketing p…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Intelligence
Provides vendor, market, SaaS, workforce, government contract, public company, regulatory, competitive, and AI-brand intelligence…
captapi
Retrieves social media profiles, posts, engagement metrics, comments, marketplace listings, events, and Meta advertising data acr…
CorpusIQ
Connects authenticated users to business systems such as CRM, ecommerce, advertising, analytics, email marketing, SEO, calendars,…
Rahul D Sarker: Marketing & RevOps Tools
Provides marketing, revenue operations, sales, advertising, SaaS, and conversion calculators, along with article search and consu…
Trillboards DOOH Advertising
Manages digital out-of-home advertising campaigns and media buys across screens, with edge-AI audience sensing, impression tracki…