Agent Plugins Marketplace
All plugins

coveo

v0.1.0-ghast.1

Search authorized enterprise content, retrieve grounded passages, and generate source-linked answers through Coveo's pinned official Labs MCP implementation.

Agent Plugins1 Skill1 MCP serverstdio

By CoveoLicense: MIT0 GitHub starsUpdated 3 hours ago

Directory evidence

Runtimes
Agent Plugins
Parsed components
2 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/coveo/.

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

Plugin files

plugins/coveo/
├── plugin.json
├── skills/coveo/SKILL.md
└── mcp.json

Included Skills1

coveoskills/coveo/SKILL.md

Search authorized enterprise content, retrieve grounded passages, and generate source-linked answers through Coveo's official Labs MCP server.

MCP servers1

coveostdio
command
node
args
-e const crypto = require("node:crypto"); const fs = require("node:fs"); const os = require("node:os"); const path = require("node:path"); const { spawn, spawnSync } = require("node:child_process"); const repository = "https://github.com/coveo-labs/coveo-mcp-server"; const revision = "d93b77ee3d1a53b8547adad431e8c6355bb85f23"; const expectedHashes = { ".python-version": "fa682ae9d943f5c8076e68335c9ba3ab4d063ad035c07ac6928653dd4ac50af7", "README.md": "412e32d2546a2babf77911b16f308c20a0723b4fa32288f8d5bab0b85ee6c486", "pyproject.toml": "b1d697688a21ef4b1a766a20d1bda8e64e891c285a543d68ec1fef32dbe6ece6", "uv.lock": "b922891bd77e46661523574e909ba9cab8a2dc7d84d1dee49adb9d305e1e9212", "src/coveo_mcp_server/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "src/coveo_mcp_server/coveo_api.py": "4b99ce8b567cb1b29a9608facaa2a37e51b051a7d8ebbf6cd5ab564c7434361d", "src/coveo_mcp_server/server.py": "260c287bed109f482fac2dc8a4cc1308f1c125f111143aa3bd08edd83f711de1", }; function fail(message) { console.error(message); process.exit(1); } for (const name of ["COVEO_API_KEY", "COVEO_ORGANIZATION_ID"]) { const value = process.env[name]; if (typeof value !== "string" || !value.trim() || /[\0\r\n]/.test(value)) { fail(`Set ${name} in the Ghast host environment before starting Coveo.`); } } if ( process.env.COVEO_ANSWER_CONFIG_ID && /[\0\r\n]/.test(process.env.COVEO_ANSWER_CONFIG_ID) ) { fail("COVEO_ANSWER_CONFIG_ID contains invalid control characters."); } const git = process.platform === "win32" ? "git.exe" : "git"; const uv = process.platform === "win32" ? "uv.exe" : "uv"; for (const [command, label] of [[git, "Git"], [uv, "Astral uv"]]) { const probe = spawnSync(command, ["--version"], { stdio: "ignore" }); if (probe.status !== 0) fail(`${label} is required to run Coveo MCP.`); } let cacheRoot = process.env.COVEO_MCP_CACHE_DIR; if (cacheRoot) { if (!path.isAbsolute(cacheRoot)) { fail("COVEO_MCP_CACHE_DIR must be an absolute path."); } } else { cacheRoot = path.join(os.tmpdir(), "ghast-coveo-mcp"); } const checkout = path.join(cacheRoot, revision); const installEnv = { ...process.env }; delete installEnv.COVEO_API_KEY; delete installEnv.COVEO_ORGANIZATION_ID; delete installEnv.COVEO_ANSWER_CONFIG_ID; installEnv.UV_NO_PROGRESS = "1"; function run(command, args, options = {}) { const result = spawnSync(command, args, { cwd: options.cwd, env: options.env || installEnv, stdio: ["ignore", "ignore", "inherit"], }); if (result.status !== 0) { fail(`Unable to prepare Coveo MCP with ${command}.`); } } if (!fs.existsSync(checkout)) { fs.mkdirSync(cacheRoot, { recursive: true }); const temporary = `${checkout}.tmp-${process.pid}-${Date.now()}`; try { run(git, ["clone", "--filter=blob:none", "--no-checkout", repository, temporary]); run(git, ["fetch", "--depth", "1", "origin", revision], { cwd: temporary }); run(git, ["checkout", "--detach", revision], { cwd: temporary }); fs.renameSync(temporary, checkout); } catch (error) { fs.rmSync(temporary, { recursive: true, force: true }); fail(`Unable to clone the audited Coveo MCP source: ${error.message}`); } } const headResult = spawnSync(git, ["rev-parse", "HEAD"], { cwd: checkout, encoding: "utf8", }); const remoteResult = spawnSync(git, ["remote", "get-url", "origin"], { cwd: checkout, encoding: "utf8", }); if ( headResult.status !== 0 || remoteResult.status !== 0 || typeof headResult.stdout !== "string" || typeof remoteResult.stdout !== "string" ) { fail("Cached Coveo MCP checkout is not a valid Git repository."); } const head = headResult.stdout.trim(); const remote = remoteResult.stdout.trim().replace(/\.git$/, ""); if (head !== revision || remote !== repository) { fail("Cached Coveo MCP checkout does not match the audited official source."); } const statusResult = spawnSync( git, ["status", "--porcelain", "--untracked-files=all"], { cwd: checkout, encoding: "utf8" }, ); if ( statusResult.status !== 0 || typeof statusResult.stdout !== "string" || statusResult.stdout.trim() ) { fail("Cached Coveo MCP checkout contains unreviewed local changes."); } if (fs.existsSync(path.join(checkout, ".env"))) { fail("Remove the untrusted .env file from the cached Coveo MCP checkout."); } for (const [relative, expected] of Object.entries(expectedHashes)) { const file = path.join(checkout, relative); if (!fs.existsSync(file)) fail(`Audited Coveo source file is missing: ${relative}`); const actual = crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); if (actual !== expected) fail(`Audited Coveo source file changed: ${relative}`); } run(uv, ["sync", "--frozen", "--no-dev"], { cwd: checkout }); const runtimeEnv = { ...process.env, UV_NO_PROGRESS: "1" }; delete runtimeEnv.COVEO_MCP_CACHE_DIR; const child = spawn( uv, [ "run", "--frozen", "--no-sync", "python", "-c", "from coveo_mcp_server.server import mcp; mcp.run(transport='stdio')", ], { cwd: checkout, env: runtimeEnv, stdio: "inherit" }, ); child.on("error", (error) => fail(`Unable to start Coveo MCP: ${error.message}`)); for (const signal of ["SIGINT", "SIGTERM"]) { process.once(signal, () => child.kill(signal)); } child.on("exit", (code, signal) => { if (signal) { process.removeAllListeners(signal); process.kill(process.pid, signal); } else process.exit(code === null ? 1 : code); });

Plugin manifests1

plugins/coveo/plugin.json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "coveo",
  "version": "0.1.0-ghast.1",
  "description": "Search authorized enterprise content, retrieve grounded passages, and generate source-linked answers through Coveo's pinned official Labs MCP implementation.",
  "author": {
    "name": "Coveo",
    "url": "https://www.coveo.com"
  },
  "homepage": "https://www.coveo.com/en/developers/mcp-server",
  "repository": "https://github.com/coveo-labs/coveo-mcp-server",
  "license": "MIT",
  "extensions": {
    "ai.trapezohe.ghast": {
      "category": "productivity",
      "upstreamRevision": "d93b77ee3d1a53b8547adad431e8c6355bb85f23",
      "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.

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