Back to Browse

Theopenlane MCP Server

Developer ToolsLow Risk10.0MCP RegistryLocal
Free

Server data from the Official MCP Registry

MCP server for Openlane GRC: controls, evidence, policies, risks, workflows, and approvals.

About

MCP server for Openlane GRC: controls, evidence, policies, risks, workflows, and approvals.

Security Report

10.0
Low Risk10.0Low Risk

Valid MCP server (6 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry.

8 files analyzed · No issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

HTTP Network Access

Connects to external APIs or services over the internet.

file_system

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

Openlane API token or PATRequired

Environment variable: OPENLANE_API_TOKEN

Organization ID for multi-org PATsOptional

Environment variable: OPENLANE_ORGANIZATION_ID

Openlane API base URLOptional

Environment variable: OPENLANE_BASE_URL

Enable write MCP toolsOptional

Environment variable: OPENLANE_ALLOW_WRITE

Enable delete MCP toolsOptional

Environment variable: OPENLANE_ALLOW_DELETE

Documentation

View on GitHub

From the project's GitHub README.

Openlane MCP Server

CI Go License CodeQL

A secure, open-source Model Context Protocol server for the Openlane GRC platform.

This project is not an official Openlane product and is not endorsed by theopenlane, Inc.

Overview

openlane-mcp lets MCP clients such as Cursor and Claude Desktop query Openlane over stdio (default) or Streamable HTTP. It talks to Openlane Cloud or a self-hosted instance through the official Openlane Go client.

MCP Client
    → Openlane MCP Server (stdio or HTTP)
        → Official Openlane Go Client
            → Openlane API

The server is read-only by default. Write and delete tools are opt-in and independent. Openlane authorization still applies to every request.

Features

  • Openlane MCP access for programs, controls, evidence, policies, risks, standards, tasks, entities (vendors), assets, platforms, contacts, findings, assessments, control implementations, groups, users, and workflows
  • Enriched get tools with vendor/security fields and compact relationship summaries
  • List filters on entities, risks, findings, evidence, programs, assessments, implementations, and workflows
  • Opt-in create/update tools for controls, evidence, policies, risks, tasks, vendors/entities, contacts, vendor Risk Reviews, workflow definitions, workflow assignments, and native policy lifecycle
  • Opt-in delete tools for the same domains plus workflow definitions (except programs and standards)
  • Openlane Cloud and self-hosted Openlane (configurable base URL)
  • stdio transport (default) and opt-in Streamable HTTP transport
  • Native Go binary
  • Docker image (published with GitHub Releases)
  • MCP Registry listing on tagged releases (io.github.GregDog/mcp-server-theopenlane)

Quick Start

Create an Openlane API token or PAT in console developer settings. Organization tokens start with tola_. Personal access tokens start with tolp_.

export OPENLANE_API_TOKEN="tola_..."
# Optional for multi-org PATs:
export OPENLANE_ORGANIZATION_ID="..."

openlane-mcp serve

Then connect an MCP client. See Client configuration.

Installation

From source

go install github.com/GregDog/mcp-server-theopenlane/cmd/openlane-mcp@latest

Requires Go 1.27 or later.

GitHub Releases

Binary archives will be published on tagged GitHub Releases (linux/darwin amd64+arm64, windows amd64) with SHA256 checksums.

Docker

docker run --rm -i \
  -e OPENLANE_API_TOKEN \
  -e OPENLANE_ORGANIZATION_ID \
  ghcr.io/gregdog/mcp-server-theopenlane serve

Images are published with GitHub Releases to ghcr.io/gregdog/mcp-server-theopenlane.

Client configuration

Cursor (stdio, recommended)

This repository's .cursor/mcp.json uses scripts/mcp-serve.sh, which loads .env and runs the local binary:

{
  "mcpServers": {
    "openlane": {
      "command": "bash",
      "args": ["${workspaceFolder}/scripts/mcp-serve.sh"]
    }
  }
}

Or install globally and pass env vars directly:

{
  "mcpServers": {
    "openlane": {
      "command": "openlane-mcp",
      "args": ["serve"],
      "env": {
        "OPENLANE_API_TOKEN": "${env:OPENLANE_API_TOKEN}",
        "OPENLANE_ORGANIZATION_ID": "${env:OPENLANE_ORGANIZATION_ID}"
      }
    }
  }
}

Cursor (HTTP)

Start the server with bash scripts/mcp-http.sh (see HTTP transport), then use examples/cursor-http.mcp.json as a template.

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "openlane": {
      "command": "openlane-mcp",
      "args": ["serve"],
      "env": {
        "OPENLANE_API_TOKEN": "tola_your_token_here"
      }
    }
  }
}

Prefer environment substitution or a local secrets store over committing tokens. Examples in this repository use fictional values only.

Security

Read tools are always available. Write tools require OPENLANE_ALLOW_WRITE=true or --allow-write. Delete tools require OPENLANE_ALLOW_DELETE=true or --allow-delete.

A successful read still requires:

  1. An Openlane token with the relevant object:read scope (or equivalent PAT permissions)
  2. Openlane authorization for that object in the selected organization

Writes and deletes additionally require server opt-in (OPENLANE_ALLOW_WRITE / OPENLANE_ALLOW_DELETE) and matching Openlane token permissions. Workflow definition writes, workflow assignment actions, native policy lifecycle actions, and workflow deletes also require confirm: true on the tool call.

Tokens are never logged. See docs/security.md.

Tool coverage

ToolDescription
openlane_controls_listList controls
openlane_controls_searchSearch controls by ref code, title, or description
openlane_control_getGet a control by ID (with relationship summaries)
openlane_programs_listList programs (optional name filter)
openlane_program_getGet a program by ID (with relationship summaries)
openlane_evidence_listList evidence metadata (optional program/control filters)
openlane_evidence_getGet evidence metadata by ID
openlane_policies_listList internal policies (optional status filter)
openlane_policies_awaiting_approvalList policies awaiting approval (native NEEDS_APPROVAL + your pending workflow assignments)
openlane_policy_getGet a policy by ID
openlane_risks_listList risks (optional program/entity/control/status filters)
openlane_risk_getGet a risk by ID (with relationship summaries)
openlane_findings_listList findings (optional program/assessment/open/status/severity filters)
openlane_finding_getGet a finding by ID
openlane_assessments_listList assessments
openlane_assessment_getGet an assessment by ID
openlane_control_implementations_listList control implementations
openlane_control_implementation_getGet a control implementation by ID
openlane_mapped_controls_listList cross-framework control mappings (MappedControl)
openlane_mapped_control_getGet a control mapping by ID
openlane_standards_listList standards / frameworks
openlane_standard_getGet a standard by ID
openlane_tasks_listList tasks
openlane_task_getGet a task by ID
openlane_entities_listList entities (vendors; optional risk/tier/review/security filters)
openlane_entity_getGet an entity by ID (vendor/security/commercial fields)
openlane_assets_listList assets
openlane_asset_getGet an asset by ID
openlane_platforms_listList platforms (system boundaries; optional name, display id, status, environment, region, criticality filters)
openlane_platform_getGet a platform by ID (narrative, owner roles, scope links, diagram metadata)
openlane_contacts_listList contacts
openlane_contact_getGet a contact by ID
openlane_reviews_listList vendor Risk Reviews (optional entity filter)
openlane_review_getGet a vendor Risk Review by ID
openlane_groups_listList groups (optional name filter)
openlane_group_getGet a group by ID
openlane_users_listList users (optional name/email filters)
openlane_user_getGet a user by ID
openlane_workflows_listList workflow definitions (optional schema/kind/active filters)
openlane_workflows_searchSearch workflow definitions by name or description
openlane_workflow_getGet a workflow definition by ID (with plain-English summary)
openlane_workflow_instances_listList workflow instances (optional definition/state/object filters)
openlane_workflow_instance_getGet a workflow instance by ID (assignments, events, proposal preview)
openlane_workflow_assignments_listList my workflow approval assignments
openlane_workflow_assignment_getGet a workflow assignment by ID (targets, due date, object context)
openlane_workflow_metadata_getGet workflow-eligible fields, edges, and resolver keys per object type

Write tools (require OPENLANE_ALLOW_WRITE=true or --allow-write):

ToolDescription
openlane_control_create / openlane_control_updateCreate or update a control
openlane_mapped_control_create / openlane_mapped_control_updateCreate or update cross-framework control mappings (MappedControl)
openlane_evidence_create / openlane_evidence_updateCreate or update evidence; optional control_ids / add_control_ids / remove_control_ids (org-owned controls only — not system catalog copies); optional base64 file uploads
openlane_controls_list / openlane_controls_searchOptional linkable_only returns org-owned controls suitable for evidence linking
openlane_policy_create / openlane_policy_updateCreate or update an internal policy
openlane_policy_submit_for_approval / openlane_policy_approve / openlane_policy_publish / openlane_policy_return_to_draftNative InternalPolicy status transitions (confirm required)
openlane_risk_create / openlane_risk_updateCreate or update a risk
openlane_task_create / openlane_task_updateCreate or update a task
openlane_entity_create / openlane_entity_updateCreate or update an entity (vendor); optional base64 logo upload or logo_remote_url
openlane_platform_create / openlane_platform_updateCreate or update a platform (system boundary); owner fields accept user id, email, name, or group id/name; optional scope link ids and base64 diagram uploads
openlane_contact_createCreate a contact (optional entity_ids)
openlane_vendor_risk_review_create / openlane_vendor_risk_review_updateCreate or update a vendor Risk Review
openlane_workflow_create / openlane_workflow_updateCreate or update a WorkflowDefinition (confirm required)
openlane_workflow_assignment_approve / openlane_workflow_assignment_rejectApprove or reject a WorkflowAssignment (confirm required)
openlane_workflow_assignment_request_changes / openlane_workflow_assignment_reassignRequest changes or reassign an assignment (confirm required)

Delete tools (require OPENLANE_ALLOW_DELETE=true or --allow-delete):

ToolDescription
openlane_control_deleteDelete a control by ID
openlane_mapped_control_deleteDelete a control mapping by ID
openlane_evidence_deleteDelete evidence by ID
openlane_policy_deleteDelete a policy by ID
openlane_risk_deleteDelete a risk by ID
openlane_task_deleteDelete a task by ID
openlane_workflow_deleteDelete a workflow definition by ID (confirm required)

See docs/tools.md for full details. With all modes enabled there are 77 tools (44 read, 27 write, 6 delete).

Enriched get tools return bounded relationship summaries (count + items) so agents can answer program, vendor, control, and finding questions without chaining dozens of shallow calls.

List responses are paginated (items, next_cursor, has_more, total_count). Default page size is 20; maximum is 50.

There is no dedicated control search GraphQL operation in the current Openlane Go client. openlane_controls_search uses official ControlWhereInput contains-filters.

File contents and presigned download URLs are not returned from read tools. Write tools accept optional base64-encoded files[] on evidence create/update (default max 10 MiB decoded per file).

Linking evidence to controls

openlane_evidence_create accepts optional control_ids; openlane_evidence_update supports add_control_ids / remove_control_ids. Only org-owned controls (owner_id set) may be linked — system catalog copies are rejected (core#1647). Use openlane_controls_search with linkable_only: true to list linkable controls. Program-imported controls may still show source: FRAMEWORK when owner_id is set.

openlane_control_update accepts owner_id and delegate_id as user id, email, name, or group id; user identifiers resolve to managed personal groups (Openlane controlOwnerID / delegateID). Read responses include control_owner and delegate objects with resolved user_email — do not use openlane_user_get on group ids. See docs/openlane-assignee-ids.md (user vs group vs org; what is fixed globally vs controls-only).

For large files[] base64 uploads, prefer a direct MCP client or automation script that passes the payload machine-to-machine. Agent loops that copy content_base64 between tool calls may truncate or corrupt the data.

HTTP transport

By default the server uses stdio. For local HTTP testing:

export OPENLANE_MCP_TRANSPORT=http
export OPENLANE_MCP_HTTP_ADDR=127.0.0.1:8090
openlane-mcp serve

The default bind is loopback only (127.0.0.1:8090). Do not use 0.0.0.0 or bare :port addresses unless you understand the exposure.

HTTP mode has no built-in authentication. Do not expose it directly to the public internet. Anyone who can reach the endpoint can use the server's Openlane token. For remote or shared-network deployment, place a trusted authentication reverse proxy (or equivalent private network controls) in front of the server. See docs/security.md.

Increase OPENLANE_MCP_HTTP_MAX_BODY_BYTES when uploading large evidence files over HTTP.

MCP Registry

Published to the MCP Registry as io.github.GregDog/mcp-server-theopenlane on each tagged release. The OCI package is ghcr.io/gregdog/mcp-server-theopenlane.

Development

make test
make build
./bin/openlane-mcp version

See docs/development.md.

Contributing

See CONTRIBUTING.md. To add or extend an MCP tool, see docs/adding-tools.md.

Issues labeled good first issue or help wanted are a good place to start.

Licence

Apache License 2.0. See LICENSE.

Openlane names are used only to describe compatibility. Do not copy Openlane logos or imply official endorsement.

Reviews

No reviews yet

Be the first to review this server!