sfdtBLOCK
Salesforce DevTools — CLI, VS Code extension, sf plugin, MCP server, and web dashboard for Salesforce DX deploy, test, org health, and release management. AI-optional, CI-ready.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Org health and tech debt for Salesforce — see the org you actually have, then change it safely.
@sfdt/cli is the command-line core of the SFDT suite. It diagnoses org health and technical debt (audit, monitoring, drift, dependencies, permissions, coverage), groups that evidence under the AI-Readiness Index, and ships changes with preflight, testing and rollback. Pairs with the SFDT Chrome extension and the VS Code extension.
📖 [Read the docs at sfdt.dev →](https://sfdt.dev/) · npm · Usage guide
[](https://www.npmjs.com/package/@sfdt/cli) [](https://www.npmjs.com/package/@sfdt/cli) [](https://marketplace.visualstudio.com/items?itemName=sfdt.sfdt-devtools) [](https://github.com/scoobydrew83/sfdt/actions/workflows/ci.yml) [](https://github.com/scoobydrew83/sfdt/actions/workflows/codeql.yml) [](https://github.com/scoobydrew83/sfdt/blob/main/LICENSE) [](https://nodejs.org)
Features
- Org health & tech-debt diagnosis —
sfdt audit(17 checks: access sprawl, MFA, unused and unreferenced Apex, inactive automation, deprecated API versions, connected apps, missing field descriptions, setup audit-trail anomalies),sfdt monitor(limits, erro
15935ebe5f2fOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add web --env GW_TOKEN=${GW_TOKEN} -- npx -y @sfdt/[email protected]{
"mcpServers": {
"web": {
"command": "npx",
"args": [
"-y",
"@sfdt/[email protected]"
],
"env": {
"GW_TOKEN": "${GW_TOKEN}"
}
}
}
}Exposed tools (54)
31 read · 21 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
A | read | d |
D1 | read | |
Set | write | . |
Stage1 | read | present |
V2 | read | documented |
sfdt-plugin-custom | read | A custom plugin for sfdt |
sfdt-plugin-prompted | read | Another desc |
sfdt_apex_logs | read | List recent Apex debug logs, or retrieve one log body by Id. Read-only. |
sfdt_apex_run | write | Execute Anonymous Apex in the org from a file or inline code. Mutating (the code runs with the authenticated user\ |
sfdt_apex_trace | read | Manage Apex debug trace flags. action= |
sfdt_api_versions | read | Audit Salesforce API versions across local source and the org — per-type version distributions (Apex classes/triggers, Flows, LWC, Aura), sourceApiVersion, the org\ |
sfdt_compare | read | Compare metadata between two orgs, or between local source and an org. Returns compare results. |
sfdt_coverage | read | Report Apex code coverage for a Salesforce org — org-wide percentage plus per-class coverage. Read-only. |
sfdt_data_delete | destructive | Bulk-delete a configured data set in the org. Destructive — requires confirmExecution. |
sfdt_data_export | write | Export a configured data set from the org to local files. Reads from the org and writes local data files (read-only with respect to the org). |
sfdt_data_import | write | Import a configured data set into the org. Mutating (writes records) — requires confirmExecution. |
sfdt_data_load | write | Load a bulk data set (bulk.json) into the org over Bulk API v2 — insert or upsert by external id. Mutating (writes records) — requires confirmExecution. |
sfdt_dependencies | read | Show the metadata dependencies of a component — what it references and what references it. Read-only. |
sfdt_deploy | write | Perform a metadata deployment to a target Salesforce org. Supports a smart delta mode (only git-changed metadata with smart test selection). Potentially destructive. |
sfdt_docs | read | Generate MkDocs-compatible project documentation (custom objects + fields, Apex classes, Flows) with an optional AI overview and a Mermaid ER diagram of the data model. |
sfdt_drift | write | Run metadata drift detection between a target Salesforce org and local source directories. |
sfdt_events_list | read | List every subscribable streaming channel in the org — custom and standard platform events, custom channels, and Change Data Capture entities — with each channel\ |
sfdt_events_publish | write | Publish one platform event to the org\ |
sfdt_events_tail | read | Subscribe to a platform event or CDC channel and collect events. ALWAYS bounded — it returns after timeoutSeconds, or earlier once max events arrive or an expectation matches. Set replay to |
sfdt_flow_scan | read | Analyze a Salesforce org\ |
sfdt_get_parked_result | read | Retrieve the full payload of a previously parked tool result. |
sfdt_history | write | Show recent sfdt run history (audit, monitor, quality, test, deploy, agent-test, ...) from the local run index — trend org-health, test, and deploy outcomes over time. Read-only. |
sfdt_ledger_list | read | List org changes sfdt has recorded, newest first, with the state each replaced. Status is derived: applied, failed, undone, or PENDING — pending means the change was recorded but its outcome never was, so the command may have been interrupted mid-write and the org should be checked. Read-only. |
sfdt_logs | read | Retrieve the latest structured or raw execution logs for DevOps actions. |
sfdt_manifest_from_git | read | Generate package.xml and destructiveChanges.xml manifests using Git diff analysis. |
sfdt_monitor | write | Run org monitoring checks (org limit consumption, recent Apex job failures, security health-check score, org info, recent deployment health, legacy API usage, paused flow interviews) and optionally a full metadata backup. Returns a normalised snapshot of check results. |
sfdt_notify | write | Send the latest audit or monitor snapshot to configured notification channels (Slack/Teams/Google Chat/email/webhook), applying each channel\ |
sfdt_permissions_matrix | write | Show what each profile and permission set GRANTS on one object — object-level CRUD plus per-field read/edit. CRITICAL WORDING: these are GRANTED permissions, never |
sfdt_pr_comment | write | Post the latest audit or monitor snapshot to the current pull request as a markdown comment (via the gh CLI). |
sfdt_preflight | write | Run sfdt pre-deployment validation checks (git clean state, branch naming rules, Apex test runs, coverage threshold checks, etc.). Useful before validation or deployment. |
sfdt_quality | read | Analyze Apex test quality, generate IsTest boilerplate stubs, or generate a fix-plan for coverage gaps. |
sfdt_quick_deploy | write | Quick deploy a previously validated metadata validation job using validation job ID. |
sfdt_record_clone | write | Create a copy of a record from its createable fields, with optional overrides. Mutating — requires confirmExecution. |
sfdt_record_edit | write | Update fields on one record. Fields the org reports as non-editable are refused locally, with the reason, before anything is sent. Mutating — requires confirmExecution. |
sfdt_record_get | read | Read one Salesforce record and report which fields are editable, and why the rest are not. Read-only. |
sfdt_release | read | Build a release: generate the release manifest (package.xml) and release notes for a package. Writes release artifacts to the repo. Mutating — requires confirmExecution. |
sfdt_retrofit | read | Retrofit metadata from a source org to a target org: retrieve specified metadata types, commit, then smart-deploy. Validate-only unless execute=true. |
sfdt_rollback | read | Roll back the last successful deployment using org backup snapshots. |
sfdt_scan | read | Fetch the complete metadata inventory of a Salesforce org (all component types and members). Read-only. |
sfdt_scratch_create | write | Create a Salesforce scratch org. Mutating (consumes a DevHub scratch-org allocation) — requires confirmExecution. |
sfdt_scratch_delete | destructive | Delete a scratch org by alias or username. Destructive — requires confirmExecution. |
sfdt_scratch_pool | read | Inspect or top up the scratch-org pool. action= |
sfdt_soql_describe | read | Describe an sObject — fields (type, picklists, references), key prefix, and child relationships. Read-only. |
sfdt_soql_plan | read | Fetch the org query plans for a SOQL query (REST explain endpoint) — leading operation, relative cost, cardinality, and notes. The query is never executed. Read-only. |
sfdt_soql_query | write | Execute a SOQL SELECT with a row bound enforced (config soql.defaultLimit/maxLimit — never unbounded). Returns records plus truncation metadata. Read-only. |
sfdt_soql_search | read | Find sObjects in the org by name substring (schema search across the org inventory). Read-only. |
sfdt_soql_validate | read | Validate a SOQL query without executing it — local static checks plus an org LIMIT 0 round-trip (degrades to local-only when the org is unreachable). Read-only. |
sfdt_test | write | Run Apex tests via the enhanced test runner. Optionally limit to specific test classes. Consumes org test resources; not metadata-mutating. |
sfdt_validate | write | Perform a deployment validation dry-run on Salesforce without committing changes. |
Trust audit
BLOCKgrade F · trust 46/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (7 observation(s))
- Network
- declared (4 observation(s))
- Shell
- declared (2 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
sfdt is a **generic tool** — it contains no project-specific values. All configuration lives in a `.sfdt/` directory created per-project by `sfdt init`. Commands are thin wrappers that load config, se
`chrome://extensions` with Developer Mode enabled, or use the public Web
viewmodel.ts
const key = '-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA\nzzz\n-----END RSA PRIVATE KEY-----';
const out = redactSensitiveData('-----BEGIN PRIVATE KEY-----\nabc\n-----END PRIVATE KEY-----');const SECRET = '-----BEGIN RSA PRIVATE KEY-----\n'
'-----BEGIN PRIVATE KEY-----',
{ Id: '5000', d: '-----BEGIN PRIVATE KEY-----' },sfdt_data_delete, sfdt_scratch_delete
ci-template-injection.test.js
.vscodeignore
AGENTS.md
GEMINI.md
action = yaml.load(await fs.readFile(ACTION_PATH, 'utf-8'));
expect(() => yaml.load(r.content), `${provider}/${type}/${auth} must parse as YAML`).not.toThrow();expect(() => yaml.load(r.content)).not.toThrow();
import { SFDT_TOKENS_CSS } from '../../lib/tokens.js';import { SFDT_COMPONENT_CSS } from '../../lib/ui-styles.js';import { watchTheme, OWN_PAGE_COLOR_SCHEME_CSS } from '../../lib/theme.js';import { isFeatureEnabled, loadSettings } from '../../lib/settings.js';import { loadRecents, pushRecent } from '../../lib/palette-recents.js';describe('ai.baseURL — exfiltration destination (H3)', () => {['data.dir', { data: { dir: '/tmp/exfil' } }],{ type: 'email', to: ['[email protected]'], smtp: { hostEnv: 'SMTP_HOST' } },{ type: 'email', to: ['[email protected]'], smtp: { hostEnv: 'SMTP_HOST' } },Gates applied: instruction_override, no_behavioural_pass.
15935ebe5f2ffull audit observations/trust-audit/mcp-server/scoobydrew83__sfdt.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 15935ebe5f2f | BLOCK | F | 46 | first audit |
Questions
What is the sfdt MCP server?
Salesforce DevTools — CLI, VS Code extension, sf plugin, MCP server, and web dashboard for Salesforce DX deploy, test, org health, and release management. AI-optional, CI-ready.
What tools does sfdt expose?
54 in total: 31 read-only, 21 that write, and 2 that can delete or overwrite (sfdt_data_delete, sfdt_scratch_delete). Every one is listed on this page with its risk.
Is sfdt safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (46/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does sfdt need?
It reads GW_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does sfdt run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as @sfdt/web at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (15935ebe5f2f), read on 2026-10-11. The repository is watched and re-audited when it changes.