What's new ⬇ Download Reportworq
⬇ Guide PDF

The MCP shim for desktop AI clients#

Desktop and IDE AI clients such as Claude Desktop, Cursor, and Cline speak MCP over a launched local process, while Reportworq serves MCP over HTTP. The MCP shim (reportworq-mcp.exe) is the small Windows connector that bridges the two: the client launches it, and it forwards the client's requests to Reportworq. Through the shim, the client sees the same governed catalog of distribution jobs and the same permission trimming as any other MCP client.

When to use it. Use the shim for a local AI client that launches an MCP server as a process on a Windows workstation. Native-HTTP clients such as ChatGPT and Copilot Studio need no connector, they connect directly over HTTPS, so for those the admin recipe gives you a URL-only snippet instead. When the instance uses OAuth access, Claude, VS Code, Cursor, and Cline connect without the shim and each user signs in; see Connect native MCP clients with OAuth sign-in (direct). Microsoft 365 Copilot uses the Copilot agent, not the shim.

Before you begin#

Download the connector and snippet (administrator)#

  1. Open Settings ▸ Integrations ▸ AI Agent Access (MCP).
  2. Expand the Connect: MCP clients (Claude, VS Code, Cursor, Cline, ChatGPT, Copilot Studio) recipe.
  3. Choose Download Connector to stream the bundled reportworq-mcp.exe.
  4. Pick your Client and Connection Path. The recipe generates a copy-paste configuration snippet shaped for that client and path. Only the paths your channel switches allow are offered.
  5. Hand the connector and the snippet to the integration user.

The connector also ships inside the main Reportworq installer, one copy per installed version. To update the binary on a workstation, re-download the current version from this recipe.

Configure the client (integration user)#

  1. Place reportworq-mcp.exe somewhere on the workstation. Putting it on PATH is simplest; it needs no separate .NET runtime.

  2. Paste the snippet into your AI client's mcpServers configuration block. The snippet's arguments differ by connection path:

    Argument Direct on-prem CloudHub-relayed
    --server Your Reportworq URL The CloudHub base URL
    --apikey Your workspace Local API access token Omitted (the CloudHub connection itself carries authentication)
    --path Not used /mcp/v1/<cloudhub-connector-key>
    ?workspace=<name> Not used Appended to --path when more than one workspace exists; omitted for a single workspace
  3. Restart the AI client so it launches the connector.

Test the connection and download readiness#

Confirm the shim is wired before relying on it in the client, because a client that cannot reach Reportworq often shows a confusing "server crashed" or "no tools available" message rather than a clean transport error.

  1. From a terminal, run the connector with your arguments and pipe an MCP initialize request to it. A single JSON-RPC line comes back with a server name of reportworq-mcp, which confirms the connector is framing correctly.
  2. Follow with a tools/list request. A tool list confirms the upstream Reportworq instance is reachable and your credentials were accepted.
  3. In the client, ask what jobs are available. You should see the catalog trimmed to your permissions.

Connect native MCP clients with OAuth sign-in (direct)#

Claude (claude.ai and Claude Desktop), VS Code with GitHub Copilot, Cursor, and Cline can connect straight to the Reportworq /mcp endpoint with no shim and no API key. Each user signs in with your organization's own identity provider, and every result is scoped to that user's Reportworq permissions. The client finds your sign-in page from the server's protected-resource metadata, which names the MCP server URL you set up below. For how this works, a workflow diagram, and a short setup checklist, start with Direct OAuth sign-in for MCP clients; this section is the full per-client reference.

Prerequisites for direct sign-in#

Confirm the following before you start:

Set up direct sign-in (administrator)#

To advertise direct sign-in to the clients:

  1. Open Settings ▸ Integrations ▸ AI Agent Access (MCP).
  2. Under Access, set Access Mode to OAuth. Under Channels, turn on Direct URL. The Direct OAuth sign-in section appears. If this instance doesn't use CloudHub, also turn off CloudHub relay: while it is on with no Cloud API configured, the page refuses to save and asks for a Cloud API URL and key.
  3. MCP server URL is the public https address of the /mcp endpoint exactly as the clients will use it, for example https://reports.contoso.com/mcp. When your External URL (under Settings ▸ Configuration) is an https address with no path, the page offers it followed by /mcp: select the Use button under the field to fill it in. Reportworq only accepts sign-ins for a URL saved here, never for one it works out on its own, so enter it only once your app registration carries it (see the identity-provider steps below). To use another address, enter it. Write it the way clients normalize it: lowercase host, no :443, and no trailing slash, query, or fragment. Write a non-ASCII host name in its xn-- form. The page refuses any other form and suggests the right one. If you reach the admin page through a different public address, a second Use button offers that one.
  4. Leave OAuth audience as it is if you use Microsoft 365 Copilot: it is the same value as the OAuth Audience on the Copilot recipe, Copilot's tokens are checked against it, and the page won't let you clear it while the CloudHub relay channel is on. Tokens issued for the MCP server URL are accepted in addition. If it is blank and your Entra API issues v2.0 access tokens, set it to api://<API client id>: a v2.0 token carries the API's client id as its audience, and this value covers that.
  5. Client ID for native apps is the application (client) id that the AI clients sign in with (see the identity-provider steps below). With Microsoft Entra, leave it blank to use the client id of the app registration Reportworq's sign-in uses; the field shows it. Enter another id only if you registered a separate app for the AI clients. It is not a secret. The connection recipes fill it in.
  6. Select Save Changes.

The status line under the section reads Direct sign-in advertised for your URL once the saved settings are complete. If it shows anything else, it names the missing piece.

Configure your identity provider#

The section Direct OAuth: identity provider checklist on the same page lists these steps with your URL filled in. A Reportworq administrator cannot make these changes from Reportworq: an identity-provider administrator makes them.

The clients use the following redirect URIs:

Client Redirect URI
Claude https://claude.ai/api/mcp/auth_callback (registering https://claude.com/api/mcp/auth_callback as well is optional and harmless)
VS Code None with Microsoft Entra, which VS Code signs in to with its own Microsoft sign-in. With another provider: http://127.0.0.1:33418/ (with the trailing slash) and https://vscode.dev/redirect
Cursor http://localhost:8787/callback. Cursor on the web and Cursor Agents use https://www.cursor.com/agents/mcp/oauth/callback; Remote-SSH, WSL and dev container windows may use cursor://anysphere.cursor-mcp/oauth/callback
Cline http://127.0.0.1:1456/mcp/oauth/callback. Cline uses the first free port from 1456 to 1461; Microsoft Entra ignores the port on a loopback address, other providers may need all six registered
Claude Desktop config file, or another host, through mcp-remote http://127.0.0.1:3334/oauth/callback. The recipe pins this port and host, so this one URI is enough; the port must be free when the user signs in

Microsoft Entra ID. One app registration can do everything: the one Reportworq's sign-in already uses (its SSO app). Use a separate API or client app only if your security policy asks for one. In the Microsoft Entra admin center:

  1. On the SSO app registration (or your separate API app), open Expose an API. Add the MCP server URL as an additional Application ID URI, keeping any api:// URI that Copilot already uses. The URL's host must be a custom domain verified in your tenant.

  2. On the same page, add a delegated scope named access_as_user. Clients request <MCP server URL>/access_as_user.

  3. On the client app registration (usually the same SSO app), open Authentication and add the redirect URIs of the clients you use. Register Cursor, Cline and mcp-remote under the Mobile and desktop applications platform, with no secret. If the portal refuses the http://127.0.0.1 address, add it in the app's manifest under publicClient.redirectUris. For Claude, use one of two setups:

    • the Mobile and desktop applications platform with no secret, leaving the secret blank in Claude; or
    • the Web platform with a client secret that you enter in Claude.

    The Web platform without a secret fails (AADSTS7000218), and the Single-page application platform does not work, because Claude redeems the sign-in from Anthropic's cloud.

  4. Under Expose an API ▸ Authorized client applications, add your client app's id if it is a separate app and, for VS Code, aebc6443-996d-45c2-90f0-388ff96faa56 (VS Code's Microsoft sign-in), both for the access_as_user scope.

  5. Optional: on the client app, open API permissions, add access_as_user, and grant admin consent, so users aren't asked to consent when they first sign in.

Leave the SSO app's Web redirect and client secret as they are: Reportworq's own sign-in keeps using them. Adding the public-client redirects makes the SSO app usable from desktop apps without its secret. Reportworq still only accepts tokens issued to a signed-in user for its own audience, so this lets the AI clients sign users in and nothing more. If your security policy keeps confidential and public clients apart, register a separate app for the AI clients and enter its id in Client ID for native apps.

Other identity providers (Okta, Keycloak, other custom OIDC). Make the access tokens for this API carry the MCP server URL as their audience (in Okta, the authorization server's audience; in Keycloak, an audience mapper on the client). Register a public client app for the AI clients with the redirect URIs above, and enter its id as Client ID for native apps. Also check that:

The server can only advertise a scope for Microsoft Entra, so with another provider the clients choose the scope themselves; mcp-remote asks for every scope the provider lists. If your provider refuses some of them, pass the scope to use with --static-oauth-client-metadata and a file (@/path/to/metadata.json holding { "scope": "openid email profile offline_access" }), since that option takes no environment variable.

Connect each client (integration user)#

Expand Connect: MCP clients on the same page, pick the client, and keep the Direct connection type. The recipe carries the saved MCP server URL and client id and contains no API key. Then follow the steps for your client:

To confirm the connection, ask the client which distribution jobs it can see. The list you get is trimmed to your own Reportworq permissions.

Limits of direct sign-in#

Notes and limits#

Going deeper. For the two ingress models the shim can target and how each is gated, see Copilot, MCP, and trust paths. Shim tool calls are recorded with a client and transport value; see MCP audit.

Feedback on this page

Comments, questions, requests, or something missing or unclear? Email us - the page you are on is filled in for you.

Email feedback on this page

Or write to support@reportworq.com directly.