Skip to content
Who Sees What

‹ Developers

Who Sees What MCP server preview

MCP access is in development for Who Sees What Enterprise and Lynceon, but it is not included in the product today because customer-facing token issuance is not available yet. This page previews the planned tool shape rather than documenting a provisioned entitlement.

The planned transport is hosted, remote MCP over Streamable HTTP. When it ships, you will connect by pointing your MCP client at an endpoint URL with a bearer token.

Access tiers

MCP access is planned for Who Sees What Enterprise and Lynceon, but is not included yet. The intended tool catalog will be filtered by the token’s entitlements:

  • a Who Sees What token sees the whoseeswhat_* tools;
  • a Lynceon token sees those plus the lynceon_* tools.

A tool you are not entitled to is neither listed nor callable.

Transport and endpoint

Streamable HTTP MCP. Production endpoint URLs and tokens are not issued yet. The placeholder below shows the intended shape:

https://<your-endpoint>/mcp

Authentication is a bearer token on the initialize request:

Authorization: Bearer <your-token>

The credential is bound to the MCP session for its lifetime.

Planned config-driven client connection

When MCP access ships, you will point the client at your /mcp URL with an Authorization header. For a config that supports an HTTP MCP server with headers:

{
  "mcpServers": {
    "whoseeswhat": {
      "url": "https://<your-endpoint>/mcp",
      "headers": { "Authorization": "Bearer <your-token>" }
    }
  }
}

Planned TypeScript MCP SDK connection

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';

const client = new Client({ name: 'my-agent', version: '1.0.0' });
const transport = new StreamableHTTPClientTransport(
  new URL('https://<your-endpoint>/mcp'),
  { requestInit: { headers: { authorization: 'Bearer <your-token>' } } },
);
await client.connect(transport);

// Discover the entitled tools
const { tools } = await client.listTools();
console.log(tools.map((t) => t.name));

// Run a template
const res = await client.callTool({
  name: 'whoseeswhat_run_template',
  arguments: { templateId: 'permission-audit', orgId: 'org_42' },
});
console.log(res.structuredContent);

Tool catalog

Tool names are product_action in snake_case. Each tool publishes its input schema (JSON Schema) to the client, and read-only tools carry a readOnlyHint.

Who Sees What (Enterprise)

ToolReads / writesWhat it does
whoseeswhat_list_templatesreadList the audit templates available to run (for example a permission audit), with their category and description.
whoseeswhat_get_templatereadGet one template and its parameter contract, so an agent knows exactly what inputs a run accepts.
whoseeswhat_run_templatewriteRun an audit template against a connected Salesforce org. Returns a run id and status. Metered.
whoseeswhat_get_reportreadGet the findings report for a completed run: severity counts and the individual findings.
whoseeswhat_export_reportreadExport a report as PDF, CSV, or JSON. Returns a download descriptor (content type, filename, URL).

Lynceon (superset)

A Lynceon token sees the Who Sees What tools above plus these.

ToolReads / writesWhat it does
lynceon_run_code_scanwriteRun a code-security scan over Apex and dependencies for a connected org. Metered.
lynceon_list_compliance_frameworksreadList the compliance frameworks an evidence pack can be produced for (for example SOC 2, HIPAA, GDPR).
lynceon_export_compliance_packreadExport a compliance evidence pack for a framework and run. Returns a download descriptor.
lynceon_create_monitorwriteCreate a continuous-monitoring schedule (weekly or monthly) that re-runs an audit and notifies recipients.

Result shape

A successful tool call returns the resource both as text content and, when the result is an object, as structuredContent. A failure returns an MCP error result (isError: true) whose text is code: message, for example forbidden: not entitled to "lynceon_run_code_scan".

How access and safety work

  • Who Sees What scoping is enforced by the backend, so an agent never exceeds the human caller’s own Salesforce access.
  • The same entitlement gate runs at discovery (listTools) and at call time, so a tool you are not entitled to is neither listed nor callable.
  • Every call is audited. Running a template, running a scan, and creating a monitor are writes and are metered; everything else is read-only.

Want to follow the MCP work or tell us how you would use it? Contact us, or read the REST API overview.