ScreenshotNeo

BlogHow-to

How to Fix a Website Screenshot MCP Tool That Returns a 403 Error

Trace a screenshot MCP 403 to its source, then fix the endpoint, credentials, project settings, or permissions that caused it.

By the ScreenshotNeo team4 October 20267 min read

A 403 means a service understood a request but refused it. For a website screenshot MCP tool, the fix depends on which service refused it: the MCP endpoint, a cloud project or workspace, a specific tool operation, or the website being captured. Start by locating that layer and reading the exact error body; there is no single 403 fix that applies to every screenshot MCP server.

This guide covers a provider-neutral diagnostic flow, then the provider-specific checks supported by the available documentation. The exact MCP tool, endpoint, client, and response were not specified, so use the branch that matches your error rather than assuming a particular vendor’s configuration.

1. Find out which request returned 403

First distinguish a rejected MCP request from a successful screenshot of a page that displays an access-denied response. They look similar in a UI but require different fixes.

  1. Record the MCP server name and configured endpoint.
  2. Copy the full error detail from the client. Include the HTTP status, structured tool error, OAuth error, or response body if available.
  3. Check whether the tool call itself failed or returned an image successfully. If it returned an image showing a forbidden page, investigate the target website’s access controls separately.
  4. Note which operation failed: for example, taking a screenshot versus creating a PDF. A credential can be permitted to perform one operation and denied another.

Error wording is useful evidence. PERMISSION_DENIED, API target restriction, missing ability, and workspace Forbidden can point to different settings. Do not change cloud roles or API-key restrictions until you know which provider returned the error.

2. Check the endpoint and authentication format

Confirm that the client is connecting to the intended MCP endpoint and using the transport and authentication method documented by that server. A valid credential sent in the wrong header, to the wrong project, or only during discovery can still result in a 403.

  • Check for a missing, expired, revoked, or malformed credential.
  • Verify that the credential belongs to the same project, account, or workspace as the endpoint and resource.
  • Follow the provider’s exact header convention. Some services document Authorization: Bearer …; Microsoft Playwright Workspaces documents a raw token in x-api-key, without a Bearer prefix. These formats are provider-specific, not interchangeable. See the [ScreenshotEngine authentication example](https://docs.screenshotengine.com/) and [Microsoft Playwright Workspaces guidance](https://learn.microsoft.com/en-us/azure/playwright-workspaces/how-to/mcp-server).
  • If the MCP client has separate settings for server discovery and tool calls, confirm the required credential is configured for both.

Never paste a live token into an issue, chat, or support request. Redact secrets before sharing an error.

3. Follow the provider-specific branch that matches the error

Google Developer Knowledge MCP

Google’s Developer Knowledge MCP documentation describes several distinct 403 causes. Use the returned message to select the relevant check:

Error clue Check Next step
The Developer Knowledge API has not been used or enabled API enablement for the project Enable the API in the project used by the request.
API target restriction API key restrictions Allow the Developer Knowledge API as a target for that key.
ADC reports a missing quota project Quota-project configuration Configure the quota project and send X-Goog-User-Project as the provider requires.
The quota-project header is present but the request is denied Permission on the quota project Check whether the account has roles/serviceusage.serviceUsageConsumer on that project.
OAuth returns access_denied while the app is in external testing OAuth test-user eligibility Add the account as an eligible test user.

These checks apply to Google Developer Knowledge MCP. They are not general MCP protocol requirements. See [Google’s Developer Knowledge MCP troubleshooting documentation](https://developers.google.com/knowledge/mcp/troubleshooting).

Microsoft Foundry or project-backed tools

For a Microsoft Foundry MCP call that returns Forbidden or Access denied, check the project’s IAM role assignments and verify that the identity making the call has permission for the resource and operation. If a role was just granted, allow time for the assignment to take effect before deciding it failed. See [Microsoft Foundry MCP troubleshooting](https://learn.microsoft.com/en-us/azure/ai-foundry/agents/how-to/troubleshoot-mcp).

Screenshot service token abilities and workspace sessions

Some screenshot services restrict tokens by operation. A token that can take screenshots may not be allowed to create PDFs; a missing ability can return 403. Check the token’s documented abilities against the operation that failed. [ScreenshotBuddy’s MCP documentation](https://docs.screenshotbuddy.com/) describes this kind of operation-level permission.

For a workspace-based browser service, check that the token owner can create browser sessions, use the same credential consistently, and that a session ID belongs to the same user and workspace as the current request. Microsoft Playwright Workspaces documents these ownership checks in its [MCP guidance](https://learn.microsoft.com/en-us/azure/playwright-workspaces/how-to/mcp-server).

4. Make one change and retest with a small capture

  1. Change the setting indicated by the error, such as enabling the API, correcting a header, granting an operation ability, or fixing project access.
  2. Reconnect the MCP server or refresh authentication if the client may still hold the old credential or session.
  3. Make one small screenshot request against a public page, using the same endpoint and identity as the failing call.
  4. Compare the new response with the original. If it is still 403, verify that the new request actually used the updated credential and inspect its error body again.

Changing one relevant setting at a time makes it easier to identify what resolved the issue. Client credential caching and propagation behavior vary; follow the client and provider documentation for the specific setup.

5. Common 403 cases and what to do

Symptom Likely area Action
The error names an API or target restriction API enablement or key restriction Check the named project and allowed API targets.
The token is accepted elsewhere but this MCP endpoint denies it Wrong project, workspace, account, or header convention Compare the endpoint’s documented auth format and the credential’s owner.
Screenshot capture works but PDF creation fails Operation-level token ability Check whether the credential is allowed to use the PDF tool.
A session-based tool rejects a session ID Session ownership or workspace mismatch Create or use a session under the current credential and workspace.
The response is an image of a forbidden page Target website access Check whether the target requires a login, blocks automated access, or restricts the requesting network. The MCP call may have succeeded.
A role was just assigned, but access is still denied Permission propagation or stale client state Allow for propagation, refresh the client credentials, and retry once.
The error remains opaque Provider or client diagnostics Give the administrator the timestamp, endpoint, operation, correlation ID if available, and redacted error body.

6. Keep the diagnosis reliable and safe

A 403 is an authorization signal; repeatedly retrying the same request is unlikely to repair a missing permission or wrong credential. Correct the setting indicated by the response, then use one small request to verify it. Follow the service’s own retry guidance if it documents a transient condition.

When escalating, include the server and endpoint, operation name, timestamp, response body with secrets removed, and request or correlation ID if the service provides one. Do not include API keys, bearer tokens, cookies, or signed session credentials. Provider audit logs and request IDs can help an administrator identify which identity and permission check produced the denial.

Or skip the browser setup

If you need a screenshot rather than a particular MCP server’s session, [ScreenshotNeo](https://screenshotneo.com) offers a screenshot API and an MCP server for AI agents, including Claude, Cursor, and other MCP clients. The API accepts one GET request and can return PNG, JPEG, WebP, or PDF. See the [API documentation](https://screenshotneo.com/docs/) for parameters and setup.

cURL:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python:

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
    timeout=90,
)
r.raise_for_status()
with open("shot.webp", "wb") as shot:
    shot.write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const bytes = new Uint8Array(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', bytes));

ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before the shot. Bot checks, blank pages, failed loads, and cache hits are never billed, and response headers identify the page verdict and billing status. Its MCP server gives AI agents screenshot tools. The Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 shots. Every feature is on every plan.

Create a free ScreenshotNeo account for 1,000 screenshots a month with no card.

FAQ

Does a 403 always mean the screenshot website blocked the request?

No. It can come from the MCP endpoint, cloud project, credential policy, operation permission, or target website. Check whether the tool returned an image or rejected the tool call.

Should I add Bearer to every MCP API key?

No. Header conventions differ by service. Use the exact format in the documentation for the endpoint you configured.

Can I fix a 403 by switching MCP clients?

Only if the current client is misconfigured or handles the required transport or credentials incorrectly. A server-side permission denial remains until the identity or access configuration is corrected.

What should I send an administrator?

Send the endpoint, operation, timestamp, full redacted error, and correlation ID if available. Never send the credential itself.

Is a target page’s 403 an MCP error?

Not necessarily. If the screenshot tool returned an image containing the page’s access-denied response, the capture may have succeeded and the target site returned the 403.