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)
| Tool | Reads / writes | What it does |
|---|---|---|
whoseeswhat_list_templates | read | List the audit templates available to run (for example a permission audit), with their category and description. |
whoseeswhat_get_template | read | Get one template and its parameter contract, so an agent knows exactly what inputs a run accepts. |
whoseeswhat_run_template | write | Run an audit template against a connected Salesforce org. Returns a run id and status. Metered. |
whoseeswhat_get_report | read | Get the findings report for a completed run: severity counts and the individual findings. |
whoseeswhat_export_report | read | Export 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.
| Tool | Reads / writes | What it does |
|---|---|---|
lynceon_run_code_scan | write | Run a code-security scan over Apex and dependencies for a connected org. Metered. |
lynceon_list_compliance_frameworks | read | List the compliance frameworks an evidence pack can be produced for (for example SOC 2, HIPAA, GDPR). |
lynceon_export_compliance_pack | read | Export a compliance evidence pack for a framework and run. Returns a download descriptor. |
lynceon_create_monitor | write | Create 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.