JSON:API v1.0 · Verified against live tenant · 74 tools

Diligent Issues,
composed by an agent.

74 tools across 11 categories — 58 verified live, 16 stubs for the Issue Manager app API when it ships. Full CRUD on classic HighBond issues, remediation actions, and action comments. Pre-flight validators, bulk operations (dry-run by default), analytics composites (owner workload, SLA adherence, aging buckets, stuck issues), and an inventory-centric data dictionary for Brain harmonization. Sibling of the Projects MCP.

74
MCP Tools
11 categories, 58 verified live
8
Inventories
Data dictionary auto-derived
502
Live issues
Pied Piper — verified end-to-end
0
Hypothesized
Every endpoint probed + confirmed
$
curl -fsSL https://mcp-issues.riskapture.ai/install.sh | bash
Installs to ~/.local/share/diligent-issues-mcp Node.js 20+, no sudo Re-run to update
Architecture

Three layers, one conversation.

The server is designed so an LLM can navigate it without memorizing tool names. A meta layer describes itself; a harmonization layer handles the complex PRD workflows; a primitive layer exposes every Issue Manager endpoint with built-in rate-limiting, caching, and role-aware errors.

Meta & control plane

Health check, session metrics, capability discovery, auto-pagination, reference cache warmup. The agent learns what it has before it guesses.

Smart ingest layer

Schema detection, template + SLA coverage discovery, subject sync, brain canonical comparison. Surfaces configuration gaps across issue types.

Primitive layer

CRUD for issues, actions, types, templates, SLAs, and relationships. Status transitions respect the role × status matrix.

Rate-limited client

Token-bucket rate limiter (600 req/hr, 6 req/sec), exponential backoff retry, structured error classification, and per-call observability metrics.

Composite tools

Issue dashboard, SLA breach metrics, schema detection — multi-call composites that build full reporting views in one tool invocation.

Name resolution

Every tool accepts human-readable names or numeric IDs. Cached resolution with 5-minute TTL. Ambiguous matches return a disambiguation table.

Two-tier response cache

Every list/get is cached in-memory (per-resource TTL) and persisted to ~/.cache/diligent-issues-mcp/cache.json. Reloaded on next process start — Claude Code's short-lived stdio MCPs actually keep their work. Writes invalidate affected keys automatically.

Role-aware edits

Edits respect the 8-role × 9-status permission matrix. Title is immutable after creation. DELETE is hard-blocked — use DISCARDED transition.

Lifecycle

Nine states, two tracks.

Every issue follows a single status machine. Audit-finding types branch into a two-step publication path; everything else goes through the standard remediation track. DISCARDED is terminal from any non-closed state.

DRAFT IN REVIEW REMEDIATION PLANNING IN REMEDIATION TO BE APPROVED CLOSED
Audit-finding only: IN REVIEW TO BE PUBLISHED PENDING ACCEPTANCE CLOSED
Terminal-reject: any non-closed state DISCARDED
Actions inside an issue have their own 7-state sub-lifecycle: DRAFT → OPEN / PENDING → IN PROGRESS → TO BE APPROVED → COMPLETED (or DISCARDED). Execution can be Parallel (all actions open at once) or Sequential (one at a time).
Roles

Eight roles, tight boundaries.

The role consolidation of 2026-03-02 merged the old Issue manager into Type manager. The Watchers role landed 2026-04-10 — view + comment only. All other roles map to verbs the MCP exposes as dedicated tools.

Diligent One Admin

Tenant admin. Assigns Type managers. Auto-granted admin rights on Issue Manager.

Type Manager

Manages all issues for a specific type. Edit/assign/decline/discard (except DRAFT/CLOSED/DISCARDED).

Issue Owner

Owns a specific issue. Configures the workflow. Can also serve as Type manager.

Action Owner

Executes one action at a time (system-wide). Cannot self-reassign.

Issue Reporter

Any user. Creates and submits new issues. Edit rights only in DRAFT.

Watcher new · 2026-04-10

View + comment. No edits, no assignments, no status changes.

Action Approver

Approves / declines completed actions. Optional per action.

Issue Approver

Approves / declines the whole issue after all actions are complete.

What you can do

Capabilities overview.

Full CRUD on issues

List, get, create (via project), update, close / reopen, publish / unpublish, dashboard, flat export. Server-side filter on closed; everything else client-side.

Full CRUD on actions

List per-issue or tenant-wide, get, create (nested POST), update, close / reopen, reassign. Required-field validation discovered live.

Action comments

List + add (type action_comments, HTML auto-wrapping for plain text), plus a composite issue conversation view that walks every action on one issue.

Analytics composites

Owner workload, action pipeline, aging buckets, stuck issues, type health, project health, SLA adherence, personal pulse — all in one call.

Bulk ops + validation

Bulk close / publish / reassign — dry-run by default. Pre-flight validators flag missing required fields and invalid enum values before mutating.

Data dictionary

Inventory-centric schema tools: enumerate + walk + introspect all 8 recognized inventories. build_data_dictionary emits a full tenant schema for Brain ingest.

Brain comparison

Read Riskapture-Knowledge canonicals; diff observed vs canonical attributes (aligned / only-in-brain / only-in-observed / type-conflicts).

Issue Manager stubs

16 tools map to documented Issue Manager app verbs (watchers, templates, SLAs, 9-state transitions). They return structured FEATURE_NOT_AVAILABLE until the app's API ships — ready to be wired to real handlers.

Tool Reference

All tools.

Meta & Control Plane (6)
ToolDescription
issues_health_checkAPI connectivity, response time, session metrics
issues_get_session_metricsCall counts, errors, retries, average duration
issues_reset_session_metricsReset counters for a new job
issues_list_capabilitiesTool inventory by category with descriptions
issues_warmup_reference_cachePre-fetch issue types, users, groups
issues_query_allAuto-paginate any JSON:API resource collection
Issues (10 · verified)

Classic HighBond issues. Required fields on create (live-discovered): title, description, deficiency_type, owner. severity and deficiency_type are tenant-specific enums — use issues_discover_allowed_values first.

ToolDescription
issues_list_issuesTenant-wide with server-side closed filter + client-side severity/type/owner/overdue/project filters
issues_get_issueFull detail with project + owner_user sideload
issues_create_issueCreate via project-nested POST MUTATES
issues_update_issuePATCH — send full attribute set (identity-only patches 422) MUTATES
issues_close_issueConvenience: closed=true MUTATES
issues_reopen_issueConvenience: closed=false MUTATES
issues_publish_issueConvenience: published=true MUTATES
issues_unpublish_issueConvenience: published=false MUTATES
issues_get_issue_dashboardComposite — severity, by-deficiency, by-project top 10, overdue list
issues_export_flatFlat dictionary export with delta mode (updated_since)
Actions (8 · verified)

Classic HighBond management actions (nested under issues). Required fields on create (live-discovered): title, due_date, owner_name, owner_email. Optional owner_user_id binds a platform user relationship.

ToolDescription
issues_list_issue_actionsActions on one issue
issues_list_actions_across_issuesWalk tenant-wide with owner/status/priority filters (N+1 — cap with max_issues)
issues_get_actionFull action detail
issues_create_actionNested POST under issue MUTATES
issues_update_actionPATCH with full attribute set MUTATES
issues_close_actionclosed=true + completed_date=today MUTATES
issues_reopen_actionclosed=false + completed_date=null MUTATES
issues_reassign_actionSwap owner_user relationship MUTATES
Action Comments (3 · verified)

Comments live on actions, not on issues. Resource type is action_comments; attribute is message_content (HTML). Plain-text input auto-wrapped in <p>…</p>.

ToolDescription
issues_list_action_commentsComments chronologically on one action
issues_add_action_commentPost a new comment MUTATES
issues_get_issue_conversationComposite — walk every action on an issue and return a single chronological transcript
Analytics Composites (8)

Multi-call composites that build full operational views — one tool invocation, complete dashboards. All read-only, all walk the cached tenant.

ToolDescription
issues_get_owner_workloadPer-owner: open / closed / overdue / severity mix / open action count
issues_get_action_pipelineFunnel by status × priority, median / p90 in-flight age
issues_get_aging_buckets0–7 / 8–30 / 31–90 / 91–180 / 180+ days since identified
issues_find_stuck_issuesOpen issues with no update for N days (default 30)
issues_get_type_healthPer-deficiency-type: open / closed / overdue / avg days-to-close
issues_get_project_healthPer-project roll-up with severity breakdown
issues_get_sla_adherenceClient-side compute on closed issues — on-time / early / late / overrun stats
issues_get_user_pulseMy open issues + my open actions + overdue — by owner name
Bulk Operations & Validation (7)

Every bulk tool is dry-run by default. Pre-flight validators check required fields and enum membership against the live tenant so you catch problems before burning a write call.

ToolDescription
issues_bulk_close_issuesclosed=true on many IDs (dry_run default true) MUTATES
issues_bulk_publish_issuespublished=true on many IDs MUTATES
issues_bulk_close_actionsclosed=true + completed_date=today MUTATES
issues_bulk_reassign_actionsReassign every open action owned by X to Y MUTATES
issues_discover_allowed_valuesSample existing data → observed severity / deficiency_type / priority / status enums
issues_validate_create_payloadPre-flight check for issue create against tenant enums + required fields
issues_validate_action_payloadPre-flight check for action create including due-date vs issue-due-date warning
Schema & Data Dictionary (6)

Inventory-centric schema tools — 8 recognized inventories (issues, actions, action_comments, users, groups, roles, entities, workflows). Emergent schema detection: dataType, population rate, distinct values, samples. Brain-canonical comparison is read-only.

ToolDescription
issues_list_canonical_inventoriesEnumerate recognized inventories with list endpoints + parent chains
issues_list_inventory_recordsWalk all records of one inventory tenant-wide (respects parent chain)
issues_get_inventory_schemaEmergent schema — dataType, population rate, distinct values, samples
issues_build_data_dictionaryComposite — full tenant dictionary across every inventory, one call
issues_list_brain_canonical_inventoriesREAD-ONLY list of Riskapture Brain canonicals from Riskapture-Knowledge
issues_compare_inventory_to_brainREAD-ONLY diff: aligned / only-in-brain / only-in-observed / type-conflicts
Smart Ingest — PRD (3)
ToolDescription
issues_schema_detectionPopulation rate per attribute, observed enums, custom_attribute terms
issues_subject_syncFull or delta (updated_since) sync of all issues
issues_find_duplicate_issuesCross-project dedup with Levenshtein scoring
Platform (5)
ToolDescription
issues_list_usersAll platform users
issues_list_groupsUser groups
issues_list_rolesPlatform roles
issues_list_entitiesOrganizational entities
issues_api_rawGeneric JSON:API call — DELETE blocked ESCAPE HATCH
Response Cache (2)

Two-tier cache (in-memory + on-disk at ~/.cache/diligent-issues-mcp/cache.json) — reloaded on next process start so Claude Code's short-lived stdio MCPs actually keep their work. Writes invalidate affected keys automatically.

ToolDescription
issues_cache_statusKeys by prefix, bytes, hit/miss/write counters, disk file path
issues_clear_cachePurge scope: all / reference / instances / brain
Issue Manager App Stubs (16)

Every tool documented in the Issue Manager help docs whose API endpoint returns 404 on every tenant we probed. Each returns a structured FEATURE_NOT_AVAILABLE error with a help-doc URL. Ready to be wired to real handlers when the app's API surface is published.

ToolDescription
issues_list_typesIssue types (Administration) STUB
issues_get_typeIssue type detail + subtypes + type-dependent fields STUB
issues_list_templatesIssue templates (Settings) STUB
issues_list_slasSLA configs keyed by (type, severity) STUB
issues_add_watcherWatchers role (2026-04-10) STUB
issues_remove_watcher  STUB
issues_list_issue_relationshipsCross-app relationships STUB
issues_add_relationshipLink to Risk / Control / Asset / Audit STUB
issues_transition_issueDRAFT / IN REVIEW / REMEDIATION PLANNING / IN REMEDIATION / TO BE APPROVED / CLOSED / DISCARDED STUB
issues_assign_ownerType manager assigns Issue owner STUB
issues_add_commentComment on an issue (classic API only has action comments) STUB
issues_start_actionAction owner starts action STUB
issues_mark_action_doneAction owner marks done STUB
issues_approve_actionApprover approves STUB
issues_decline_actionApprover declines STUB
issues_initiate_workflowParallel / Sequential workflow initiation STUB
Configuration

Environment variables.

VariableRequiredDescription
ISSUES_BASE_URLYesAPI base URL (e.g. https://apis-us.diligentoneplatform.com)
ISSUES_API_TOKENYesBearer token from Diligent One > Profile > Application tokens
ISSUES_ORG_IDYesOrganisation ID (numeric)
ISSUES_LOG_FILENoPath for JSONL request log
ISSUES_CACHE_ENABLEDNoSet to false to disable the response cache (default on)
ISSUES_CACHE_DIRNoCache location (default ~/.cache/diligent-issues-mcp)
RISKAPTURE_KNOWLEDGE_DIRNoPath to the Riskapture-Knowledge checkout — enables Brain canonical comparison tools. Default ~/projects/Riskapture-Knowledge.

Regional base URLs: US, Canada, Europe, Asia, Australia, Africa, Japan, South America. Token type must be Diligent One Platform (full API) — Analytics / Activity Logs tokens will fail authentication.

Sibling MCPs — same bearer token, different surfaces: Projects MCP, ERM MCP.

Constraints

Hard rules.

No DELETE
API accepts DELETE with 204 but it's destructive. Hard-blocked in the client — use close_issue / close_action instead.
Rate Limits
600 req/hour, 6 req/sec. Token-bucket rate limiter enforced client-side with exponential backoff.
Required Fields
Issues require title + description + deficiency_type + owner. Actions require title + due_date + owner_name + owner_email. Use the validators before creating.
Tenant Enums
severity and deficiency_type values are tenant + project-type-specific. Call issues_discover_allowed_values first.
Full-attribute PATCH
PATCH with only deltas often returns 422 "can't be blank". Re-send the full attribute set you want on the record.
Server Filter: closed only
Only filter[closed]=true|false works server-side. Everything else filters client-side.
JSON:API v1.0
All requests use application/vnd.api+json. Cursor-based pagination via links.next — never integer page numbers.
Sideload scope
?include=project and ?include=owner_user return data. Other includes are accepted (200) but return empty included[].
Bulks dry-run by default
Every issues_bulk_* tool defaults to dry_run=true. Explicitly set dry_run=false to execute.
Quick start

Getting started.

1. Install via the one-liner above, or clone from GitHub

2. Mint a Diligent One Platform bearer token at Profile → Application tokens

3. Restart Claude Code: /mcp reset diligent-issues

4. Start with issues_health_check to verify connectivity

5. Run issues_list_capabilities to see all available tools

6. Use issues_warmup_reference_cache before bulk operations

7. Try issues_get_issue_dashboard for a one-call view of severity, status, and overdue issues