IMPORTANT ASYNCHRONOUS TASK WORKFLOW
- Call this MCP generation tool once and read taskId from structuredContent.
- Do not call the generation tool again while the task is PENDING or RUNNING.
- Wait at least 5 seconds, then call nexscope_media_task_result with skillSlug set to page-lighthouse, the exact taskId, and the same bearer API key. While the task remains PENDING or RUNNING, use 5, 10, 20, and 30-second progressive backoff. Never query more often than once every 5 seconds.
- Stop querying when the task succeeds or fails. On success, return the final Nexscope resource URLs and the returned count as the actual charged credits.
- Never invent a taskId and never expose internal provider names or provider resource URLs.
Pages Websites
Page Lighthouse Laboratory Evidence MCP Tool
Page Lighthouse Laboratory Evidence. Bounded Lighthouse laboratory facts with explicit missing evidence. One submit and at most six fixed reads. Missing values are not zero. Prices and publication are unapproved. Owner-only historical results are retained seven days.
nexscope_page_lighthouse/api/skill-api/v1/mcptools/callAuthentication
Send the user API key as a bearer token on every MCP JSON-RPC request.
Authorization: Bearer nk-xxxxxxxxxxxxxxxxxIf authentication is missing or invalid, ask the user to open API Access and copy a valid key before calling this tool.
Call this MCP tool
Use tools/call with the MCP tool name below. The arguments object should match the table on this page.
{
"jsonrpc": "2.0",
"id": "page-lighthouse-1",
"method": "tools/call",
"params": {
"name": "nexscope_page_lighthouse",
"arguments": {
"url": "https://example.com/"
}
}
}POST /api/skill-api/v1/mcphttps://www.nexscope.ai/mcp-map/page-lighthouseAsynchronous task workflow
This capability uses a create-and-query flow. Creating the task and retrieving its final generated resources are two connected requests.
- 1. Create onceCall the MCP tool once and keep the returned
taskId. - 2. Query with backoffCall
nexscope_media_task_resultwith this skill slug and task ID. Wait at least 5 seconds first; while pending or running, back off at 5, 10, 20, then 30-second intervals. - 3. Use final resultStop at a terminal status. Successful results contain Nexscope resource URLs and the actual charged-credit count.
{
"jsonrpc": "2.0",
"id": "page-lighthouse-result-1",
"method": "tools/call",
"params": {
"name": "nexscope_media_task_result",
"arguments": {
"skillSlug": "page-lighthouse",
"taskId": "TASK_ID_FROM_THE_GENERATION_RESULT"
}
}
}GET https://api.nexscope.ai/api/skill-api/v1/skills/page-lighthouse/tasks/{taskId}Arguments
Response fields
Treat structuredContent as the programmatic API response payload.
| Name | Type | Required | Description |
|---|---|---|---|
data | any | required | Data value used by this API operation. |
code | integer | required | 0 means accepted or successful; nonzero is a platform error. |
msg | string | null | required | Msg value used by this API operation. |
ts | string | required | Epoch milliseconds. |
time | string | required | Server local time: yyyy-MM-dd HH:mm:ss. |
cost | string | required | Elapsed milliseconds, never credits; -1 outside web requests. |
traceId | string | null | required | Trace id value used by this API operation. |
Any of option 1
| Name | Type | Required | Description |
|---|---|---|---|
data | any | required | Data value used by this API operation. |
One of option 1 — requires callId, status, result
| Name | Type | Required | Description |
|---|---|---|---|
data | object | required | Data value used by this API operation. |
data.result | any | required | Result value used by this API operation. |
data.callId | string | required | Call id value used by this API operation. |
data.schemaVersion | string | optional | Schema version value used by this API operation. |
data.status | string | required | Status value used by this API operation. |
data.source | string | optional | Source value used by this API operation. |
data.requestedAt | string | integer | null | optional | Requested at value used by this API operation. |
data.completedAt | string | integer | null | optional | Completed at value used by this API operation. |
data.coverage | object | null | optional | Coverage value used by this API operation. |
data.usage | object | null | optional | Usage value used by this API operation. |
data.usage.billingStatus | string | null | optional | Billing status value used by this API operation. |
data.usage.chargedCredits | string | integer | null | optional | Charged credits value used by this API operation. |
Any of option 1 — requires source, coverage, items, missingFields, warnings
| Name | Type | Required | Description |
|---|---|---|---|
data.result | object | required | Result value used by this API operation. |
data.result.source | object | required | Source value used by this API operation. |
data.result.source.provider | string | required | Provider value used by this API operation. Constant: DATAFORSEO |
data.result.source.product | string | required | Product value used by this API operation. Constant: on_page |
data.result.source.candidateId | string | required | Candidate id value used by this API operation. Constant: MD-PW-15 |
data.result.source.sourceCallId | string | null | required | Source call id value used by this API operation. |
data.result.source.sourceSchemaVersion | string | null | required | Source schema version value used by this API operation. |
data.result.source.sourcePlanVersion | string | null | required | Source plan version value used by this API operation. |
data.result.source.collectedAt | integer | null | required | Collected at value used by this API operation. Minimum: 0 |
data.result.source.queriedAt | integer | required | Queried at value used by this API operation. Minimum: 0 |
data.result.source.observationKind | string | required | Observation kind value used by this API operation. Constant: LAB_RUN |
data.result.coverage | object | required | Coverage value used by this API operation. |
data.result.coverage.sampled | boolean | required | Sampled value used by this API operation. Constant: true |
data.result.coverage.maxCrawlPages | integer | null | required | Max crawl pages value used by this API operation. Minimum: 0 |
data.result.coverage.pagesCrawled | integer | null | required | Pages crawled value used by this API operation. Minimum: 0 |
data.result.coverage.stopReason | string | null | required | Stop reason value used by this API operation. |
data.result.coverage.providerTotal | integer | null | required | Provider total value used by this API operation. Minimum: 0 |
data.result.coverage.returnedCount | integer | required | Returned count value used by this API operation. Minimum: 0 Maximum: 1 |
data.result.coverage.offset | integer | required | Offset value used by this API operation. Constant: 0 |
data.result.coverage.limit | integer | required | Limit value used by this API operation. Constant: 1 |
data.result.coverage.truncated | boolean | required | Truncated value used by this API operation. |
data.result.coverage.invalidItemCount | integer | required | Invalid item count value used by this API operation. Minimum: 0 |
data.result.items | array | required | Items value used by this API operation. Maximum items: 1 |
data.result.items[] | object | required | Item in data result items. |
data.result.items[].requestedUrl | string | required | Requested url value used by this API operation. |
data.result.items[].finalUrl | string | null | required | Final url value used by this API operation. |
data.result.items[].lighthouseVersion | string | null | required | Lighthouse version value used by this API operation. |
data.result.items[].fetchTime | integer | null | required | Fetch time value used by this API operation. Minimum: 0 |
data.result.items[].device | string | required | Device value used by this API operation. Allowed: DESKTOP, MOBILE |
data.result.items[].categories | object | required | Categories value used by this API operation. |
data.result.items[].categories.performance | number | null | required | Performance value used by this API operation. Minimum: 0 Maximum: 1 |
data.result.items[].categories.accessibility | number | null | required | Accessibility value used by this API operation. Minimum: 0 Maximum: 1 |
data.result.items[].categories.bestPractices | number | null | required | Best practices value used by this API operation. Minimum: 0 Maximum: 1 |
data.result.items[].categories.seo | number | null | required | Seo value used by this API operation. Minimum: 0 Maximum: 1 |
data.result.items[].metrics | object | required | Metrics value used by this API operation. |
data.result.items[].metrics.firstContentfulPaintMs | number | null | required | First contentful paint ms value used by this API operation. Minimum: 0 |
data.result.items[].metrics.largestContentfulPaintMs | number | null | required | Largest contentful paint ms value used by this API operation. Minimum: 0 |
data.result.items[].metrics.totalBlockingTimeMs | number | null | required | Total blocking time ms value used by this API operation. Minimum: 0 |
data.result.items[].metrics.cumulativeLayoutShift | number | null | required | Cumulative layout shift value used by this API operation. Minimum: 0 |
data.result.items[].metrics.speedIndexMs | number | null | required | Speed index ms value used by this API operation. Minimum: 0 |
data.result.missingFields | array | required | Missing fields value used by this API operation. |
data.result.missingFields[] | object | required | Item in data result missingFields. |
data.result.missingFields[].field | string | required | Field value used by this API operation. |
data.result.missingFields[].reason | string | required | Reason value used by this API operation. Allowed: UPSTREAM_FIELD_MISSING, UPSTREAM_FIELD_INVALID, DUPLICATE_UPSTREAM_ITEM, UPSTREAM_ITEM_MISSING |
data.result.warnings | array | required | Warnings value used by this API operation. |
data.result.warnings[] | string | required | Item in data result warnings. |
Any of option 2
| Name | Type | Required | Description |
|---|---|---|---|
data.result | null | required | Result value used by this API operation. |
One of option 2 — requires callId, status, reason, retryable
| Name | Type | Required | Description |
|---|---|---|---|
data | object | required | Data value used by this API operation. |
data.reason | string | required | Reason value used by this API operation. |
data.callId | string | null | required | Call id value used by this API operation. |
data.status | string | required | Status value used by this API operation. |
data.retryable | boolean | required | Retryable value used by this API operation. |
data.taskId | string | null | optional | Task id value used by this API operation. |
Any of option 2
| Name | Type | Required | Description |
|---|---|---|---|
data | null | required | Data value used by this API operation. |
Examples
Example arguments
{
"url": "https://example.com/"
}Example structuredContent
{
"data": {
"status": "PROCESSING",
"retryable": false,
"reason": "IN_PROGRESS",
"callId": "00000000-0000-4000-8000-000000000001"
},
"code": 0,
"msg": null,
"ts": "0",
"time": "2026-01-01 00:00:00",
"cost": "-1",
"traceId": null
}