Skip to content

Commit c1a86b2

Browse files
committed
Address review feedback for PR #266
1 parent 0a37154 commit c1a86b2

8 files changed

Lines changed: 71 additions & 18 deletions

File tree

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,24 @@ release cadence.
1414

1515
_Changes on `main` since the latest tagged release that have not yet been included in a stable release._
1616

17+
### Added
18+
19+
#### MCP Server Prompts
20+
21+
| Prompt | Description |
22+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
23+
| `data_extension_development` | End-to-end workflow for authoring CodeQL data extensions (Models-as-Data) for third-party libraries; restricts `language` to MaD-supported languages. ([#266](https://github.com/advanced-security/codeql-development-mcp-server/pull/266)) |
24+
25+
#### MCP Server Resources
26+
27+
| URI | Description |
28+
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
29+
| `codeql://learning/data-extensions` | Models-as-Data (MaD) overview: YAML model formats, extensible predicates, and model-pack layout. ([#266](https://github.com/advanced-security/codeql-development-mcp-server/pull/266)) |
30+
| `codeql://languages/rust/library-modeling` | Rust-specific library-modeling guide (crate-path-based MaD format) for the `data_extension_development` workflow. ([#266](https://github.com/advanced-security/codeql-development-mcp-server/pull/266)) |
31+
| `codeql://languages/swift/library-modeling` | Swift-specific library-modeling guide (MaD tuple format) for the `data_extension_development` workflow. ([#266](https://github.com/advanced-security/codeql-development-mcp-server/pull/266)) |
32+
33+
Every CodeQL language that supports Models-as-Data upstream (`cpp`, `csharp`, `go`, `java`, `javascript`, `python`, `ruby`, `rust`, `swift`) now has a registered `codeql://languages/<language>/library-modeling` resource. `actions` is intentionally excluded because it does not support data extensions.
34+
1735
### Fixed
1836

1937
- **`query_results_cache_retrieve` rejected by GitHub Copilot Chat (HTTP 400 invalid schema)** — The `lineRange` and `resultIndices` parameters were defined with `z.tuple([...])`, which the MCP SDK serialized to a bare-array JSON Schema value (e.g. `[{"type":"integer"}, {"type":"integer"}]`). GitHub Copilot Chat enforces strict JSON Schema validation and rejected the entire `ql-mcp` server with `"... is not of type 'object', 'boolean'"`. Both parameters now use `z.object({ start, end })` so they serialize to a valid `type: "object"` JSON Schema. Tool callers must now pass `{ "lineRange": { "start": 1, "end": 10 } }` instead of `{ "lineRange": [1, 10] }`. ([#263](https://github.com/advanced-security/codeql-development-mcp-server/pull/263))

server/dist/codeql-development-mcp-server.js

Lines changed: 17 additions & 6 deletions
Large diffs are not rendered by default.

server/dist/codeql-development-mcp-server.js.map

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/src/lib/resources.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99

1010
// Static imports — esbuild inlines the file contents as string literals.
11-
import dataExtensionsOverviewContent from '../resources/data-extensions-overview.md';
11+
import learningDataExtensionsContent from '../resources/learning-data-extensions.md';
1212
import dataflowMigrationContent from '../resources/dataflow-migration-v1-to-v2.md';
1313
import learningQueryBasicsContent from '../resources/learning-query-basics.md';
1414
import performancePatternsContent from '../resources/performance-patterns.md';
@@ -84,10 +84,10 @@ export function getQueryUnitTesting(): string {
8484
}
8585

8686
/**
87-
* Get the data extensions overview content
87+
* Get the data extensions learning resource content
8888
*/
89-
export function getDataExtensionsOverview(): string {
90-
return dataExtensionsOverviewContent;
89+
export function getLearningDataExtensions(): string {
90+
return learningDataExtensionsContent;
9191
}
9292

9393
/**

server/src/prompts/constants.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,23 @@ export const SUPPORTED_LANGUAGES = [
2020
'rust',
2121
'swift',
2222
] as const;
23+
24+
/**
25+
* CodeQL languages that support Models-as-Data (MaD) data extensions.
26+
*
27+
* This is the subset of {@link SUPPORTED_LANGUAGES} for which the server
28+
* registers a `codeql://languages/<language>/library-modeling` resource.
29+
* `actions` is intentionally excluded because the GitHub Actions language
30+
* does not support data extensions upstream.
31+
*/
32+
export const MAD_SUPPORTED_LANGUAGES = [
33+
'cpp',
34+
'csharp',
35+
'go',
36+
'java',
37+
'javascript',
38+
'python',
39+
'ruby',
40+
'rust',
41+
'swift',
42+
] as const;

server/src/prompts/workflow-prompts.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { z } from 'zod';
1010
import { access } from 'fs/promises';
1111
import { basename, isAbsolute, normalize, relative, resolve, sep } from 'path';
1212
import { fileURLToPath } from 'url';
13-
import { SUPPORTED_LANGUAGES } from './constants';
13+
import { MAD_SUPPORTED_LANGUAGES, SUPPORTED_LANGUAGES } from './constants';
1414
import { addCompletions, getEffectiveLanguage } from './prompt-completions';
1515
import { loadPromptTemplate, processPromptTemplate } from './prompt-loader';
1616
import { getUserWorkspaceDir } from '../utils/package-paths';
@@ -195,13 +195,17 @@ export async function resolvePromptFilePath(
195195
* Schema for data_extension_development prompt parameters.
196196
*
197197
* - `language` is **required** – the model format depends on the language.
198+
* Restricted to {@link MAD_SUPPORTED_LANGUAGES} (the subset of supported
199+
* languages that have a registered `library-modeling` resource and
200+
* upstream Models-as-Data support); `actions` is excluded because it
201+
* does not support data extensions.
198202
* - `libraryName` is optional – the library or framework to model.
199203
* - `database` is optional – path to a CodeQL database for testing.
200204
*/
201205
export const dataExtensionDevelopmentSchema = z.object({
202206
language: z
203-
.enum(SUPPORTED_LANGUAGES)
204-
.describe('Programming language for the data extension'),
207+
.enum(MAD_SUPPORTED_LANGUAGES)
208+
.describe('Programming language for the data extension (Models-as-Data supported languages only)'),
205209
libraryName: z
206210
.string()
207211
.optional()
File renamed without changes.

server/src/tools/codeql-resources.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
66
import {
7-
getDataExtensionsOverview,
7+
getLearningDataExtensions,
88
getDataflowMigration,
99
getLearningQueryBasics,
1010
getPerformancePatterns,
@@ -224,7 +224,7 @@ export function registerCodeQLResources(server: McpServer): void {
224224
{
225225
uri: 'codeql://learning/data-extensions',
226226
mimeType: 'text/markdown',
227-
text: getDataExtensionsOverview(),
227+
text: getLearningDataExtensions(),
228228
},
229229
],
230230
};

0 commit comments

Comments
 (0)