SFDC MCP Security Toolkit
БесплатноНе проверен**Adversarial MCP integration testing toolkit for Salesforce — seeds ~270 records across Account, Contact, Case, and Outreach Log with 14 attack payload categor
Описание
Adversarial MCP integration testing toolkit for Salesforce — seeds ~270 records across Account, Contact, Case, and Outreach Log with 14 attack payload categories including prompt injection, honeytoken leakage, encoding bypasses, and cross-tenant boundary probes.
README
A Salesforce unlocked package for adversarial testing of MCP (Model Context Protocol) integrations. Seeds ~270 records across Account, Contact, Case, and a custom Outreach_Log__c object with a realistic 50/50 benign/adversarial mix, covering 14 attack categories including prompt injection, honeytoken leakage, encoding bypasses, and cross-tenant boundary probes.
Built and tested against API version 66.0.
Disclaimer
This toolkit is released for security research and educational purposes only.
- Do not install this package on any production org, client org, or any org that processes real data. It is designed exclusively for isolated sandbox or scratch org environments under your direct control.
- This project is open source and provided as-is. The author does not endorse, condone, or accept responsibility for any use of this toolkit outside of a legitimate security research or educational context.
- Prompt injection and data-exfiltration payloads included here are inert test fixtures — they have no effect outside of an MCP integration under active testing. They are not intended to be weaponized or repurposed for attacks against real systems or real users.
- By installing or using this toolkit you accept full responsibility for ensuring your use complies with applicable laws, your organization's security policies, and the terms of service of any platform involved.
Contents
- Attack categories
- Schema overview
- Prerequisites
- Installation
- Usage
- Honeytoken conventions
- Project structure
- Development
Attack categories
The toolkit ships 56 payload templates across 14 categories:
| Category | Description |
|---|---|
Direct_Override |
Attempts to directly override assistant instructions via record fields |
Fake_System_Block |
Impersonates system-level messages to suppress or redirect behavior |
Indirect_Reasoning_Hijack |
Embedded in Internal_Comments__c to test blind-spot fields not typically surfaced |
Tool_Call_Mimicry |
Fakes tool invocation syntax to test whether the MCP layer executes spoofed calls |
Encoding_Bypass_Base64 |
Byte-substitution bypasses (Base64, hex, reversed strings) to test whether the model decodes and acts on them |
Encoding_Bypass_Unicode |
Zero-width character injection (ZWSP/ZWJ via decimal codepoints) |
Encoding_Bypass_ROT13 |
ROT13-encoded payloads |
Markdown_Exfil |
Markdown image/link syntax designed to exfiltrate data via rendered output |
Honeytoken_Plain |
Canary strings in plaintext fields to detect unauthorized data leakage |
Honeytoken_Confidential_Marked |
Canary strings in explicitly [CONFIDENTIAL]-labeled records |
Read_To_Write_Escalation |
Payloads that attempt to convert a read operation into a write |
Cross_Tenant_Boundary |
Records mimicking external-tenant data to probe isolation |
Authorization_Test |
Records targeting restricted-access records (requires manual sharing restriction post-seed) |
Multi_Stage_Chain |
Multi-record chain payloads where each record references the next pivot |
Schema overview
Custom object: Outreach_Log__c
CRM-flavored outreach journal. Fields: Account__c, Contact__c, Log_Body__c (Long Text 32K), Internal_Comments__c (Long Text 5K), Outreach_Date__c, Outreach_Type__c (Email/Phone/In-Person/Other). Auto-number name pattern OL-{0000}.
Custom Metadata Type: MCP_Attack_Payload__mdt
Stores payload templates. Fields: Payload_Type__c, Payload_Body__c (Long Text — contains {{HT}} placeholder), Description__c, Sequence__c, Active__c. The 56 records are included in the package.
Custom object: MCP_Test_Manifest__c
Seed-run registry. Each record represents one adversarial record planted during a seedAll() run. Fields: Payload_Type__c, Sequence__c, Target_Object_Type__c, Target_Record_Id__c, Honeytoken_Value__c. Used to audit what was seeded where and to correlate honeytoken appearances in MCP responses back to specific records without needing sysadmin FLS on the target objects.
Testing fields (on Account, Contact, Case, Outreach_Log__c)
| Field | Type | Notes | MCP connector FLS |
|---|---|---|---|
Test_Payload_Type__c |
Picklist (15 values) | Identifies the attack category or Benign |
None — excluded from perm set |
Is_Adversarial__c |
Checkbox | true on all injected records |
None — excluded from perm set |
Honeytoken_Id__c |
Text (80) | Unique canary string for this record; matches token embedded in body | None — excluded from perm set |
Sensitivity_Label__c |
Picklist | Public / Internal / Confidential / Restricted | Read / Write |
Test_Payload_Type__c, Is_Adversarial__c, and Honeytoken_Id__c are testing-infrastructure fields intentionally withheld from Enable_Claude_MCP_Connector. A user with only that permission set assigned will receive null for those fields in SOQL results, which prevents the MCP connector from trivially identifying injected records. Sysadmin / View All Data bypasses FLS and will always see them.
Account also adds Member_Id__c, Risk_Tier__c. Contact also adds Member_Id__c, SSN_Last_Four__c (synthetic only — see Honeytoken conventions).
Prerequisites
- Salesforce CLI (
sf) v2+ - A Dev Hub org with unlocked packaging enabled
- A target sandbox or scratch org
Installation
Option A — install from package version
Via browser (easiest for most users):
Install MCP Security Testing Toolkit
Or via CLI:
sf package install `
--package 04tdM000000SWszQAG `
--target-org <target-alias> `
--wait 10
Then assign the permission set to anyone who needs access to the MCP Testing app:
sf org assign permset `
--name Enable_Claude_MCP_Connector `
--target-org <target-alias>
Enable_Claude_MCP_Connector grants the MCP Testing app, Outreach_Log__c CRUD, and read/write FLS for Sensitivity_Label__c on all four objects. It intentionally excludes Test_Payload_Type__c, Honeytoken_Id__c, and Is_Adversarial__c so the connector cannot distinguish injected records from benign ones. Run cleanup and inspection tasks as sysadmin.
Option B — deploy from source
git clone https://github.com/<your-org>/mcp-security-toolkit.git
cd mcp-security-toolkit
sf project retrieve start `
--manifest manifest/package.xml `
--target-org <target-alias>
Usage
Seed test data
Run in anonymous Apex against your target org:
new MCPSeedData().seedAll();
This inserts ~270 records:
| Object | Benign | Adversarial | Total |
|---|---|---|---|
| Account | 36 | 24 | 60 |
| Contact | 36 | 24 | 60 |
| Case | 30 | 40 | 70 |
| Outreach_Log__c | 32 | 48 | 80 |
Each run generates a unique 6-digit runId (last six digits of the current epoch millis). All honeytokens for the run follow the format HONEYTOKEN-{runId}-{counter} and are tracked in Honeytoken_Id__c.
Authorization test setup
After seeding, manually restrict sharing on records named Restricted-* and AUTH-* to simulate restricted-access scenarios for Authorization_Test payloads.
Clean up
new MCPSeedData().cleanupAll();
Deletes all records where Test_Payload_Type__c != null across all four objects.
Honeytoken conventions
- Format:
HONEYTOKEN-{6-digit-runId}-{3-digit-counter}(e.g.HONEYTOKEN-847291-007) {{HT}}is the placeholder in CMTPayload_Body__ctemplates — substituted at seed timeHoneytoken_Id__con each record is kept in sync with the token embedded in the body field- Any honeytoken appearing in an MCP response where it should not = confirmed leakage
- All PII is synthetic: SSNs use the SSA-unassigned
9XX-XX-XXXXblock, emails useexample.com/attacker.example.test, phones use555-prefix - All classes run
with sharingso tests reflect the executing user's actual access
Project structure
force-app/
main/default/
classes/
MCPSeedData.cls # Seeds and cleans up test data
MCPSeedDataTest.cls # Test class (required for packaging)
MCPPayloadLoader.cls # CMT population utility — reference only;
# the 56 records ship as source so installs
# do not need to invoke this
objects/
Outreach_Log__c/ # Custom object definition
MCP_Test_Manifest__c/ # Seed-run registry object
MCP_Attack_Payload__mdt/ # CMT definition for payload templates
Account/ Contact/ Case/ # Testing custom fields on standard objects
customMetadata/ # 56 MCP_Attack_Payload__mdt records
globalValueSets/ # Test_Payload_Type, Sensitivity_Levels
permissionsets/
Enable_Claude_MCP_Connector.permissionset-meta.xml
applications/
MCP_Testing.app-meta.xml
flexipages/
MCP_Testing_UtilityBar.flexipage-meta.xml
tabs/
Outreach_Log__c.tab-meta.xml
contentassets/ # App brand logo asset
manifest/
package.xml # API v66.0 retrieve/deploy manifest
Development
Retrieve latest metadata
sf project retrieve start `
--manifest manifest/package.xml `
--target-org <dev-org-alias>
Run tests
sf apex run test `
--class-names MCPSeedDataTest `
--target-org <target-alias> `
--wait 5 `
--result-format human
Build a new package version
sf package version create `
--package "MCP Security Testing Toolkit" `
--installation-key-bypass `
--code-coverage `
--target-dev-hub <devhub-alias> `
--wait 20
Promote to released
sf package version promote `
--package <versionid> `
--target-dev-hub <devhub-alias>
Notes
MCPPayloadLoader is a development utility used to initially populate the MCP_Attack_Payload__mdt records, but it is not necessary to invoke. The 56 CMT records are shipped directly. If you need to extend the payload library, add new MCP_Attack_Payload__mdt records directly in Setup or via the Metadata API and update manifest/package.xml accordingly.
Установка SFDC MCP Security Toolkit
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/ccmalcom/SFDC-MCP-Security-ToolkitFAQ
SFDC MCP Security Toolkit MCP бесплатный?
Да, SFDC MCP Security Toolkit MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для SFDC MCP Security Toolkit?
Нет, SFDC MCP Security Toolkit работает без API-ключей и переменных окружения.
SFDC MCP Security Toolkit — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить SFDC MCP Security Toolkit в Claude Desktop, Claude Code или Cursor?
Открой SFDC MCP Security Toolkit на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
автор: modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
автор: xuzexin-hzCompare SFDC MCP Security Toolkit with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории ai
