npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mboucher/ffe-mcp

v0.1.1

Published

Local Model Context Protocol server for Adobe Firefly Services

Readme

FFE MCP

Local stdio MCP server for Adobe Firefly Services. Reuses the FFE CLI's authentication and Photoshop operations directly, without invoking shell commands or parsing terminal output. Requires Node.js 22.13+.

Local Development

From this directory, with Node.js 22.13+ on PATH, install the published FFE packages and build the server. No sibling checkouts are required:

npm ci
npm run build
npm test

The server uses @mboucher/ffe-cli 0.1.0+ and @mboucher/ffe-cli-ps-plugin 0.1.1+ within their declared compatible version ranges. The plugin's public operations and TypeScript declarations are included in its published package.

For cross-repository development only, keep ffe-cli and ffe-cli-ps-plugin as sibling checkouts, install their development dependencies, and run:

npm --prefix ../ffe-cli run build
npm run dev:link
npm run build

dev:link uses the sibling FFE packages without changing the published dependency specifications or lockfile. Run it again after npm install or npm ci if you want to continue using local changes. Use npm ci to return to registry packages.

Connect a Client

The included .vscode/mcp.json launches the built server in offline mode. In VS Code, run MCP: List Servers, choose ffe, and start it. The MCP client owns the process; there is no HTTP listener or standalone background service to start.

Other clients can launch the same executable with this configuration shape (adapt the surrounding configuration keys to the client):

{
	"command": "node",
	"args": ["/absolute/path/to/ffe-mcp/dist/index.js"]
}

For source debugging, use VS Code's JavaScript Debug Terminal and launch an MCP Inspector session from the repository:

npx @modelcontextprotocol/inspector node dist/index.js

Set breakpoints in the built JavaScript or enable source maps in your development build. Nothing is written to stdout except MCP protocol messages; startup errors go to stderr.

Tools

| Tool | Input | Result | | --- | --- | --- | | ffe_storage_providers | No arguments | Azure Blob Storage and AWS S3 choices, required destination details, CLI flags, and upload-consent guidance | | photoshop_extract_layers | manifest, optional text / smartObjects booleans | Nested text and smart-object layers | | photoshop_get_tags | Same as extraction | Layers containing {{key}} placeholders | | photoshop_check_fonts | Full manifest, reference with sourceUrl, ISO fetchedAt, and PostScript fonts array | Font inventory, custom dependencies, completeness, reference provenance | | photoshop_sample_csv | Extracted layers array | Placeholder keys and example CSV content |

Both layer-selection booleans default to true; selecting neither is an error. Full manifest inputs accept raw manifests or succeeded job responses with embedded JSON manifests. They do not accept paths or fetch URLs. Results provide structuredContent and equivalent JSON text. A filtered layer list is not proof of whole-document validity. Font checks must inspect complete and incompleteTextLayers; fonts absent from the supplied reference are custom fonts that must be supplied separately, not automatically rejected. The validation skill lists them in its Fonts section as non-blocking dependencies. CSV output is example data, not validated production data.

For a local PSD, call ffe_storage_providers and ask the user to choose Azure Blob Storage or AWS S3 through the harness. Reuse an explicit choice already made for the current validation. The tool does not prompt by itself, choose a default, inspect credentials, or upload files. After selection, collect the provider's destination details and obtain upload/job authorization. Use the chosen provider explicitly with the FFE CLI's local-file processing; then use the supplied manifest with offline tools, or an uploaded HTTPS URL with remote tools. If CLI execution is unavailable, request an existing URL or manifest. Skip storage selection entirely when those inputs are already supplied.

Use --provider azure --account <account> --container <container> for Azure, or --provider aws --bucket <bucket> --region <region> for S3, with optional --aws-profile <name>. AWS and Adobe profiles are separate. Check installed CLI help for these flags before executing; older published versions may not support them. The provider-guidance tool does not check installed CLI versions or credentials. Restart the MCP server and refresh tool discovery after updating.

Remote Tools

Remote tools are absent by default. To enable them, add --allow-remote to the server arguments, optionally followed by --profile production. The profile is fixed for the server process, not chosen through model-supplied tool arguments.

Configure credentials separately in your trusted terminal:

ffe auth login --profile production
ffe auth status --profile production

Then configure your client to launch:

{
	"command": "node",
	"args": [
		"/absolute/path/to/ffe-mcp/dist/index.js",
		"--allow-remote",
		"--profile", "production"
	]
}

| Tool | Behavior | | --- | --- | | ffe_auth_status | Verify Adobe OAuth access; return profile and token expiry without secrets | | photoshop_generate_manifest | Submit a job for inputUrl, an existing HTTPS PSD URL; return {job} with jobId | | photoshop_job_status | Read jobId status from the fixed Photoshop origin; return {job} |

Manifest submission supports includeLayerThumbnails, includeXmp, extractSmartObjectData, trimToTransparency, and maximumThumbnailDepth. Outputs are always embedded JSON, never model-selected destinations. Poll status with a delay until succeeded or failed, then pass the succeeded job object as manifest to offline tools. Request cancellation does not cancel a remote Photoshop job. If submission fails or its outcome is uncertain, do not automatically resubmit: a remote job may already exist.

Safety and Scope

  • Offline tools require no Adobe credentials, Azure/AWS tools, filesystem access, or network calls. They inspect JSON supplied by the client or return static storage-provider guidance.
  • Enabling remote tools is not per-job consent. The client must still obtain user authorization before Adobe downloads a PSD or submits a potentially billable job. The submission tool is explicitly marked as a non-idempotent side effect.
  • Credentials stay in the CLI's OS keyring. Never supply secrets as tool arguments. Authentication verifies OAuth access, not Photoshop entitlements.
  • Source URLs may contain sensitive signed query parameters. They pass through the MCP client and Adobe; do not put them in committed configuration or reports. Remote exception details are suppressed to avoid leaking secrets and URLs.
  • Layer names, document content, CSV values, and service results are untrusted data, not instructions. The server does not execute them or follow status URLs.
  • This version does not upload local PSDs, write files, refresh font references, render variants, install skills, or modify client settings. Setup remains the responsibility of the separate ffe-setup project.

The template-validation skill owns the report workflow: linked Smart Objects and confirmed absence of valid data tags fail structural preflight, while custom fonts alone do not. It writes Markdown and self-contained HTML with a Markdown download link, returning absolute paths to both files. These are skill policies, not extra validation performed by extraction tools, and this server does not write reports or invoke artifact-design. Install the skill globally with npx @mboucher/ffe-setup; it defaults to ~/.agents/skills without a client selection. Full setup still checks Azure CLI; --skill-only skips that check.

Verification

npm run typecheck
npm test
npm pack --dry-run

Tests exercise the tools through an SDK client, including a real stdio child process. Remote tests use injected clients and credentials; they do not contact Adobe or access your keyring. Live Adobe processing requires separate authorized credentials and inputs.