Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 28 additions & 26 deletions apps/mcp-server/.speakeasy/gen.lock
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
lockVersion: 2.0.0
id: f7130d09-dac4-4515-9162-6095782b6bb6
management:
docChecksum: 35bfc6f0fda8bfe04a92b0c8d0590422
docChecksum: ac6da71b7246fc81aff6be78caf5f35c
docVersion: "1.0"
speakeasyVersion: 1.790.3
generationVersion: 2.918.4
releaseVersion: 0.2.5
configChecksum: 16b11601c6d385e8fcd89719245bf1f4
speakeasyVersion: 1.791.0
generationVersion: 2.924.0
releaseVersion: 0.2.6
configChecksum: b6b473105a7c754c04de2143d2db564a
repoURL: https://github.com/trycompai/comp.git
repoSubDirectory: apps/mcp-server
installationURL: https://github.com/trycompai/comp
published: true
persistentEdits:
generation_id: 17e70532-e3a6-4332-a01b-932b527573cb
pristine_commit_hash: e91965731fb9be5f2ad648b2b95ffdb7bf59db48
pristine_tree_hash: d6f794e558fe5cc10b16fc8c02711092d897cf29
generation_id: 3c183311-2968-4491-8fb2-38cbbf460476
pristine_commit_hash: 3efe11bf02b6929a4f3bbc8fa8f460e79d6b14ef
pristine_tree_hash: 6a0c8ee97e89247aee1f6af6e5db1f211dce3754
features:
mcp-typescript:
additionalDependencies: 0.1.0
Expand Down Expand Up @@ -51,12 +51,12 @@ trackedFiles:
pristine_git_object: 4f9e60a9462fc4def738d60c3aaadf8232ef185f
manifest.json:
id: ca642a226869
last_write_checksum: sha1:f669ae5941c3b289dc8b573789626cba3757a8fd
pristine_git_object: 9d6a1ee3db7e4e8757abffa67007794c3de60349
last_write_checksum: sha1:08ebdaa8e8498fb285c354875e7d9fee74fe2292
pristine_git_object: 546471ae0f647afd3a402ddf5d4d4a94a6fd6bd9
package.json:
id: 7030d0b2f71b
last_write_checksum: sha1:12dca10a6b86137961fd4475234c28c4a0ac078b
pristine_git_object: 2832d9d9215452a3d3fa717c8708e56ca305370e
last_write_checksum: sha1:57355c53023fd05f90962f97b509fc63cd82e004
pristine_git_object: 9c3cc72188129a188fd11498bbce5cafee30312b
src/core.ts:
id: f431fdbcd144
last_write_checksum: sha1:3c1fe2275a0f345cf54298150f100299284b3f0e
Expand Down Expand Up @@ -1095,8 +1095,8 @@ trackedFiles:
pristine_git_object: b6427c087fa3a520b90ad94df1836393e2bc65e1
src/funcs/questionnaireQuestionnaireControllerAnswerSingleQuestionV1.ts:
id: 77e939645afc
last_write_checksum: sha1:9d1f80574a9aa2c3b0896c0b0ecb682ee63d08a3
pristine_git_object: f7411a14e5917d4f53e789bca72362f75cc5aec6
last_write_checksum: sha1:878739188a3f896ae9ebabf01f69fbda24d4ecf9
pristine_git_object: 2e6fec1060d98830f40b80a80e42ba8d6830dd2a
src/funcs/questionnaireQuestionnaireControllerAutoAnswerAndExportUploadV1.ts:
id: 8d3b5221a040
last_write_checksum: sha1:abe54a27d9ac034de5802ccb0bac4b257d1f0f95
Expand Down Expand Up @@ -1723,16 +1723,16 @@ trackedFiles:
pristine_git_object: 9c36bf01332084f735909a71036c3544cc4c7e3a
src/landing-page.ts:
id: ef64a6ee46d7
last_write_checksum: sha1:5776685e5bb1d4778a4abb35a4d984a5b9241321
pristine_git_object: 41218b4a5099d8630f4bc30b91f75eac29ffcf28
last_write_checksum: sha1:6e7820fbb6198812d8739463c97a94a76d2614c2
pristine_git_object: d22c40907d61e5d48e517cae85eb08495d87bf7f
src/lib/base64.ts:
id: "598522066688"
last_write_checksum: sha1:e9f04a037018040361043104960982f7c22db52d
pristine_git_object: d4bd8b341290e7a828a171d840bd0b0fff7c7cd7
src/lib/config.ts:
id: 320761608fb3
last_write_checksum: sha1:84e32d3e3fe0ffeb947c26f0a03b08413cc2790d
pristine_git_object: dab403e196f65f0db332460cebcf11ad61de3093
last_write_checksum: sha1:417726f62ad7185cec76059bf0f8ac541b587867
pristine_git_object: f48bf3dc970fb07d032b8c584913ca1d35edd4f3
src/lib/encodings.ts:
id: 3bd8ead98afd
last_write_checksum: sha1:3ff4ad6809b749125820fd39c01427b84d3fe0d6
Expand Down Expand Up @@ -1819,8 +1819,8 @@ trackedFiles:
pristine_git_object: 35c8713b6f8c7f17e2545423d3e74401ff77d04b
src/mcp-server/mcp-server.ts:
id: aabbc4ab07c1
last_write_checksum: sha1:c0ee56a958e0339df1a769b03ed72a69918e60f1
pristine_git_object: 615cc68169fd072c601af0e9c64da16c5e5a3b45
last_write_checksum: sha1:d9d9934dcc66c5ef1cc3622d17b0f5d23c715f02
pristine_git_object: 9408a1c1e6eb9cba1024b7e9a1ec86fbcbd47104
src/mcp-server/prompts.ts:
id: 26f3d73cbf31
last_write_checksum: sha1:cadb036e04534a6d9d765809eebb266d188c499b
Expand All @@ -1835,8 +1835,8 @@ trackedFiles:
pristine_git_object: c25696d4c4f70e081fa5d87ad6891874c509a577
src/mcp-server/server.ts:
id: 2784dd48e82a
last_write_checksum: sha1:ec87a97923d502b60af5794da916186b9270299a
pristine_git_object: 34152619072b0a0a8ce6a8f214e8dd76fafaba83
last_write_checksum: sha1:e3069b1f0342b8d491722c9097b31a847c2423bb
pristine_git_object: 2d480e310612575a6c94fa7d3494179ea94d522f
src/mcp-server/shared.ts:
id: 074e80d4be1e
last_write_checksum: sha1:19c9034032819a14f15c430de4350c8aba99d725
Expand Down Expand Up @@ -3347,8 +3347,8 @@ trackedFiles:
pristine_git_object: 1f60df367349bd8e7bb33f262beb7927b2f6d17a
src/models/answersinglequestiondto.ts:
id: 27b165c7833f
last_write_checksum: sha1:1727dde7af44892d514b5a636c0c0ae8fbef1db3
pristine_git_object: e479191deb60ffde26f23b06fff7f8b6a6573d53
last_write_checksum: sha1:f4c50d4bbf24e0601a3fda64581ab566c8aac920
pristine_git_object: 468d6a4b3b4dec8b4f0f3eadc2c0d5e3a4d9ee64
src/models/approveaccessrequestdto.ts:
id: 70f67f1ee754
last_write_checksum: sha1:76b48399f4f6dff3a26ffa323d8394a7280ea4f1
Expand Down Expand Up @@ -6677,7 +6677,7 @@ examples:
QuestionnaireController_answerSingleQuestion_v1:
speakeasy-default-questionnaire-controller-answer-single-question-v1:
requestBody:
application/json: {}
application/json: {"question": "Do you encrypt customer data at rest?", "questionIndex": 0, "totalQuestions": 12, "organizationId": "org_abc123", "questionnaireId": "qst_abc123"}
responses:
"200":
application/json: {}
Expand Down Expand Up @@ -7787,4 +7787,6 @@ examples:
requestBody:
application/json: {"measurements": []}
examplesVersion: 1.0.2
releaseNotes: "## Mcp-typescript SDK Changes:\n* `CompAi.Audit Logs.AuditLogController_getAuditLogs_v1()`: \n * `request.offset` **Added**\n"
releaseNotes: |
## Mcp-typescript SDK Changes:
* `CompAi.Questionnaire.QuestionnaireController_answerSingleQuestion_v1()`: `request` **Changed** (Breaking ⚠️)
2 changes: 1 addition & 1 deletion apps/mcp-server/.speakeasy/gen.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ generation:
generateNewTests: true
skipResponseBodyAssertions: false
mcp-typescript:
version: 0.2.5
version: 0.2.6
additionalDependencies:
dependencies: {}
devDependencies: {}
Expand Down
31 changes: 29 additions & 2 deletions apps/mcp-server/.speakeasy/out.openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12935,6 +12935,7 @@ paths:
name: "parse-questionnaire"
/v1/questionnaire/answer-single:
post:
description: "Generate an answer for one security questionnaire item using the organization evidence library and return source references for review."
operationId: "QuestionnaireController_answerSingleQuestion_v1"
parameters: []
requestBody:
Expand Down Expand Up @@ -12975,7 +12976,6 @@ paths:
summary: "Answer one questionnaire question"
tags:
- "Questionnaire"
description: "Generate an answer for one security questionnaire item using the organization evidence library and return source references for review."
x-mint:
href: "/api-reference/questionnaire/answer-a-single-questionnaire-question"
metadata:
Expand Down Expand Up @@ -20756,7 +20756,34 @@ components:
properties: {}
AnswerSingleQuestionDto:
type: "object"
properties: {}
properties:
question:
type: "string"
description: "Security questionnaire question to answer."
example: "Do you encrypt customer data at rest?"
questionIndex:
type: "number"
description: "Zero-based index of this question in the questionnaire or page batch."
example: 0
minimum: 0
totalQuestions:
type: "number"
description: "Total number of questions in the current questionnaire or page batch."
example: 12
minimum: 1
organizationId:
type: "string"
description: "Organization ID for validation. The API uses the authenticated active organization and overwrites this value server-side."
example: "org_abc123"
questionnaireId:
type: "string"
description: "Optional questionnaire record to save the generated answer into. Omit for webpage-only answer generation."
example: "qst_abc123"
required:
- "question"
- "questionIndex"
- "totalQuestions"
- "organizationId"
SaveAnswerDto:
type: "object"
properties: {}
Expand Down
10 changes: 5 additions & 5 deletions apps/mcp-server/.speakeasy/workflow.lock
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
speakeasyVersion: 1.790.3
speakeasyVersion: 1.791.0
sources:
Comp AI API:
sourceNamespace: comp-ai-api
sourceRevisionDigest: sha256:7e436f809cfd668dfa5e35ebc8cf514687da43e9329602b90df51d2a521b2df1
sourceBlobDigest: sha256:02b9837a0a13d2d105ddfc00b05b4c76ae81d290b3986b5012dae3e79b98b800
sourceRevisionDigest: sha256:c8a2377646f2722d17f252054995b009202a1334c6aad33adf8ed9f990f80e21
sourceBlobDigest: sha256:826da6bdc8aec86733370b9e4e738d443e28e2729729154e6c085f6e04c858cb
tags:
- latest
- "1.0"
targets:
comp-ai:
source: Comp AI API
sourceNamespace: comp-ai-api
sourceRevisionDigest: sha256:7e436f809cfd668dfa5e35ebc8cf514687da43e9329602b90df51d2a521b2df1
sourceBlobDigest: sha256:02b9837a0a13d2d105ddfc00b05b4c76ae81d290b3986b5012dae3e79b98b800
sourceRevisionDigest: sha256:c8a2377646f2722d17f252054995b009202a1334c6aad33adf8ed9f990f80e21
sourceBlobDigest: sha256:826da6bdc8aec86733370b9e4e738d443e28e2729729154e6c085f6e04c858cb
workflow:
workflowVersion: 1.0.0
speakeasyVersion: latest
Expand Down
4 changes: 2 additions & 2 deletions apps/mcp-server/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ Comp AI API: Compliance automation API for SOC 2, ISO 27001, HIPAA, GDPR, eviden
<details>
<summary>Claude Desktop</summary>

Install the MCP server as a Desktop Extension using the pre-built [`mcp-server.mcpb`](https://github.com/trycompai/comp/releases/download/v0.2.5/mcp-server.mcpb) file:
Install the MCP server as a Desktop Extension using the pre-built [`mcp-server.mcpb`](https://github.com/trycompai/comp/releases/download/v0.2.6/mcp-server.mcpb) file:

Simply drag and drop the [`mcp-server.mcpb`](https://github.com/trycompai/comp/releases/download/v0.2.5/mcp-server.mcpb) file onto Claude Desktop to install the extension.
Simply drag and drop the [`mcp-server.mcpb`](https://github.com/trycompai/comp/releases/download/v0.2.6/mcp-server.mcpb) file onto Claude Desktop to install the extension.

The MCP bundle package includes the MCP server and all necessary configuration. Once installed, the server will be available without additional setup.

Expand Down
10 changes: 9 additions & 1 deletion apps/mcp-server/RELEASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,12 @@ Based on:
- OpenAPI Doc
- Speakeasy CLI 1.790.3 (2.918.4) https://github.com/speakeasy-api/speakeasy
### Generated
- [mcp-typescript v0.2.5] apps/mcp-server
- [mcp-typescript v0.2.5] apps/mcp-server

## 2026-08-01 00:52:32
### Changes
Based on:
- OpenAPI Doc
- Speakeasy CLI 1.791.0 (2.924.0) https://github.com/speakeasy-api/speakeasy
### Generated
- [mcp-typescript v0.2.6] apps/mcp-server
2 changes: 1 addition & 1 deletion apps/mcp-server/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"manifest_version": "0.3",
"name": "@trycompai/mcp-server",
"version": "0.2.5",
"version": "0.2.6",
"description": "",
"long_description": "Comp AI API: Compliance automation API for SOC 2, ISO 27001, HIPAA, GDPR, evidence collection, policy workflows, Trust Access, security questionnaires, integrations, cloud checks, and device compliance.",
"author": {
Expand Down
4 changes: 2 additions & 2 deletions apps/mcp-server/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/mcp-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@trycompai/mcp-server",
"version": "0.2.5",
"version": "0.2.6",
"author": "Comp AI",
"type": "module",
"sideEffects": false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,16 @@
*/

import { CompAiCore } from "../core.js";
import { encodeJSON } from "../lib/encodings.js";
import { compactMap } from "../lib/primitives.js";
import { safeParse } from "../lib/schemas.js";
import { RequestOptions } from "../lib/sdks.js";
import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
import { pathToFunc } from "../lib/url.js";
import { AnswerSingleQuestionDto } from "../models/answersinglequestiondto.js";
import {
AnswerSingleQuestionDto,
AnswerSingleQuestionDto$zodSchema,
} from "../models/answersinglequestiondto.js";
import { APIError } from "../models/errors/apierror.js";
import {
ConnectionError,
Expand All @@ -30,7 +35,7 @@ import { Result } from "../types/fp.js";
*/
export function questionnaireQuestionnaireControllerAnswerSingleQuestionV1(
client$: CompAiCore,
_request: AnswerSingleQuestionDto,
request: AnswerSingleQuestionDto,
options?: RequestOptions,
): APIPromise<
Result<
Expand All @@ -46,14 +51,14 @@ export function questionnaireQuestionnaireControllerAnswerSingleQuestionV1(
> {
return new APIPromise($do(
client$,
_request,
request,
options,
));
}

async function $do(
client$: CompAiCore,
_request: AnswerSingleQuestionDto,
request: AnswerSingleQuestionDto,
options?: RequestOptions,
): Promise<
[
Expand All @@ -70,6 +75,16 @@ async function $do(
APICall,
]
> {
const parsed$ = safeParse(
request,
(value$) => AnswerSingleQuestionDto$zodSchema.parse(value$),
"Input validation failed",
);
if (!parsed$.ok) {
return [parsed$, { status: "invalid" }];
}
const payload$ = parsed$.value;
const body$ = encodeJSON("body", payload$, { explode: true });
const path$ = pathToFunc("/v1/questionnaire/answer-single")();

const headers$ = new Headers(compactMap({
Expand Down Expand Up @@ -104,6 +119,7 @@ async function $do(
baseURL: options?.serverURL,
path: path$,
headers: headers$,
body: body$,
userAgent: client$._options.userAgent,
timeoutMs: options?.timeoutMs || client$._options.timeoutMs
|| 120000,
Expand Down
2 changes: 1 addition & 1 deletion apps/mcp-server/src/landing-page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -930,7 +930,7 @@ http_headers = { "apikey" = "YOUR_APIKEY" }`;
<h1>Instructions</h1>
<p>One-click installation for Claude Desktop users</p>
<div class="instruction-item">
<a href="https://github.com/trycompai/comp/releases/download/v0.2.5/mcp-server.mcpb" download="mcp-server.mcpb" class="action-button header-action" style="display: inline-flex; margin-bottom: 16px;">
<a href="https://github.com/trycompai/comp/releases/download/v0.2.6/mcp-server.mcpb" download="mcp-server.mcpb" class="action-button header-action" style="display: inline-flex; margin-bottom: 16px;">
πŸ“₯ Download MCP Bundle
</a>
</div>
Expand Down
6 changes: 3 additions & 3 deletions apps/mcp-server/src/lib/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
export const SDK_METADATA = {
language: "typescript",
openapiDocVersion: "1.0",
sdkVersion: "0.2.5",
genVersion: "2.918.4",
sdkVersion: "0.2.6",
genVersion: "2.924.0",
userAgent:
"speakeasy-sdk/mcp-typescript 0.2.5 2.918.4 1.0 @trycompai/mcp-server",
"speakeasy-sdk/mcp-typescript 0.2.6 2.924.0 1.0 @trycompai/mcp-server",
} as const;
2 changes: 1 addition & 1 deletion apps/mcp-server/src/mcp-server/mcp-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const routes = buildRouteMap({
export const app = buildApplication(routes, {
name: "mcp",
versionInfo: {
currentVersion: "0.2.5",
currentVersion: "0.2.6",
},
});

Expand Down
2 changes: 1 addition & 1 deletion apps/mcp-server/src/mcp-server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ export function createMCPServer(deps: {
}) {
const server = new McpServer({
name: "CompAi",
version: "0.2.5",
version: "0.2.6",
});

const getClient = deps.getSDK || (() =>
Expand Down
Loading
Loading