Agent Plugins Marketplace
All plugins

docusign

v1.0.3-ghast.1

Create, send, search, inspect, and automate Docusign agreements, envelopes, recipients, dates, obligations, and Workflow Builder processes through Docusign's official hosted MCP server.

Agent Plugins3 Skills1 MCP serverstdio

By DocusignLicense: MIT0 GitHub starsUpdated 3 hours ago

Directory evidence

Runtimes
Agent Plugins
Parsed components
4 skill or MCP entries
Source updated
Aug 30, 2026
Manifest status
Canonical path parsed

The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology

Get the plugin

git clone https://github.com/Trapezohe/ghast-plugins

Clone the source repository, then follow its setup instructions to add the plugin to a compatible client. The plugin root is plugins/docusign/.

This listing currently publishes only the generic Agent Plugins format. Automatic install commands for other clients are not generated yet.

Plugin files

plugins/docusign/
├── plugin.json
├── skills/docusign/SKILL.md
├── skills/docusign-setup/SKILL.md
├── skills/docusign-troubleshooting/SKILL.md
└── mcp.json

Included Skills3

docusignskills/docusign/SKILL.md

Create, send, search, inspect, and automate Docusign agreements, envelopes, recipients, dates, obligations, and Workflow Builder processes through Docusign's official hosted MCP server.

docusign-setupskills/docusign-setup/SKILL.md

Configure Docusign's official hosted MCP server for Ghast using a user-owned confidential OAuth application.

docusign-troubleshootingskills/docusign-troubleshooting/SKILL.md

Diagnose Docusign MCP environment, OAuth app, callback, credential-file, local bridge, entitlement, and tool failures in Ghast.

MCP servers1

docusignstdio
command
node
args
-e const fs = require("node:fs"); const http = require("node:http"); const https = require("node:https"); const path = require("node:path"); const { spawn } = require("node:child_process"); const clientFile = process.env.DOCUSIGN_OAUTH_CLIENT_FILE; if (!clientFile) { console.error( "Set DOCUSIGN_OAUTH_CLIENT_FILE to an absolute OAuth client JSON path.", ); process.exit(1); } if (!path.isAbsolute(clientFile)) { console.error("DOCUSIGN_OAUTH_CLIENT_FILE must be an absolute path."); process.exit(1); } let clientInfo; let stat; try { stat = fs.statSync(clientFile); clientInfo = JSON.parse(fs.readFileSync(clientFile, "utf8")); } catch { console.error( "DOCUSIGN_OAUTH_CLIENT_FILE must point to readable valid JSON.", ); process.exit(1); } if ( typeof clientInfo.client_id !== "string" || !clientInfo.client_id || typeof clientInfo.client_secret !== "string" || !clientInfo.client_secret ) { console.error( "Docusign OAuth JSON must contain client_id and client_secret.", ); process.exit(1); } if (process.platform !== "win32" && (stat.mode & 0o077) !== 0) { console.error("Protect the Docusign OAuth JSON with chmod 600."); process.exit(1); } const environment = ( process.env.DOCUSIGN_MCP_ENVIRONMENT || "demo" ).trim().toLowerCase(); const endpoints = { demo: "https://mcp-d.docusign.com/mcp", production: "https://mcp.docusign.com/mcp", }; const remoteUrl = endpoints[environment]; if (!remoteUrl) { console.error( "DOCUSIGN_MCP_ENVIRONMENT must be either demo or production.", ); process.exit(1); } const callbackPort = 3335; const proxyPort = Number(process.env.DOCUSIGN_MCP_PROXY_PORT || "3336"); if ( !Number.isInteger(proxyPort) || proxyPort < 1024 || proxyPort > 65535 || proxyPort === callbackPort ) { console.error( "DOCUSIGN_MCP_PROXY_PORT must be an integer from 1024 to 65535 and not 3335.", ); process.exit(1); } const target = new URL(remoteUrl); const scopes = "adm_store_unified_repo_read aow_manage signature"; const protectedResource = { resource: `http://127.0.0.1:${proxyPort}/mcp`, resource_name: "Docusign MCP compatibility bridge", authorization_servers: [target.origin], bearer_methods_supported: ["header"], scopes_supported: scopes.split(" "), resource_documentation: "https://developers.docusign.com/platform/mcp-server/", }; const proxy = http.createServer((request, response) => { const requestUrl = new URL( request.url || "/", `http://127.0.0.1:${proxyPort}`, ); if ( requestUrl.pathname === "/.well-known/oauth-protected-resource" || requestUrl.pathname === "/.well-known/oauth-protected-resource/mcp" ) { const body = Buffer.from(JSON.stringify(protectedResource)); response.writeHead(200, { "content-type": "application/json", "content-length": String(body.length), "cache-control": "no-store", }); response.end(body); return; } if (requestUrl.pathname !== "/mcp") { response.writeHead(404, { "content-type": "text/plain" }); response.end("Not found"); return; } const headers = { ...request.headers, host: target.host }; if (!headers.authorization) { headers.authorization = "Bearer invalid.invalid.invalid"; } delete headers.connection; delete headers["proxy-connection"]; const upstream = https.request( { protocol: target.protocol, hostname: target.hostname, port: target.port || 443, path: target.pathname + requestUrl.search, method: request.method, headers, }, (upstreamResponse) => { const responseHeaders = { ...upstreamResponse.headers }; delete responseHeaders.connection; response.writeHead(upstreamResponse.statusCode || 502, responseHeaders); upstreamResponse.pipe(response); }, ); upstream.on("error", (error) => { if (!response.headersSent) { response.writeHead(502, { "content-type": "text/plain" }); } response.end(`Docusign MCP upstream error: ${error.message}`); }); request.pipe(upstream); }); let child; proxy.on("error", (error) => { console.error( `Unable to start Docusign MCP compatibility bridge on 127.0.0.1:${proxyPort}: ${error.message}`, ); process.exit(1); }); proxy.listen(proxyPort, "127.0.0.1", () => { const executable = process.platform === "win32" ? "npx.cmd" : "npx"; child = spawn( executable, [ "--yes", "[email protected]", `http://127.0.0.1:${proxyPort}/mcp`, String(callbackPort), "--host", "localhost", "--allow-http", "--transport", "http-only", "--resource", remoteUrl, "--static-oauth-client-info", `@${clientFile}`, "--static-oauth-client-metadata", JSON.stringify({ scope: scopes }), ], { stdio: "inherit" }, ); child.on("error", (error) => { console.error(`Unable to start Docusign MCP bridge: ${error.message}`); proxy.close(); process.exit(1); }); child.on("exit", (code, signal) => { proxy.close(() => { if (signal) process.kill(process.pid, signal); else process.exit(code === null ? 1 : code); }); }); }); for (const signal of ["SIGINT", "SIGTERM"]) { process.on(signal, () => { if (child && !child.killed) child.kill(signal); proxy.close(); }); }

Plugin manifests1

plugins/docusign/plugin.json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "docusign",
  "version": "1.0.3-ghast.1",
  "description": "Create, send, search, inspect, and automate Docusign agreements, envelopes, recipients, dates, obligations, and Workflow Builder processes through Docusign's official hosted MCP server.",
  "author": {
    "name": "Docusign",
    "url": "https://www.docusign.com"
  },
  "homepage": "https://developers.docusign.com/platform/mcp-server/",
  "license": "MIT",
  "extensions": {
    "ai.trapezohe.ghast": {
      "category": "productivity",
      "upstreamRevision": "docusign-docs-ee7baa0a1615+chatgpt-0c1925822c08+demo-f64203b8c7d1+prod-8d3bb21db1fb",
      "icon": "./assets/icon.svg"
    }
  }
}

If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.

[docusign on Agent Plugins Marketplace](https://pluginsmp.com/plugins/docusign-2)