You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
## [4.15.9] - 2026-03-17
11
+
12
+
### Added
13
+
- Added read-only annotations to MCP tools for compatibility with Cursor Ask mode and other MCP clients that restrict tool usage based on behavior hints. [#1013](https://github.com/sourcebot-dev/sourcebot/pull/1013)
dedent`Get a list of commits for a given repository.`,
188
189
listCommitsQueryParamsSchema.shape,
190
+
{readOnlyHint: true},
189
191
async(request: ListCommitsQueryParamsSchema)=>{
190
192
constresult=awaitlistCommits(request);
191
193
@@ -201,6 +203,7 @@ server.tool(
201
203
"list_repos",
202
204
dedent`Lists repositories in the organization with optional filtering and pagination.`,
203
205
listReposQueryParamsSchema.shape,
206
+
{readOnlyHint: true},
204
207
async(request: ListReposQueryParams)=>{
205
208
constresult=awaitlistRepos(request);
206
209
@@ -226,6 +229,7 @@ server.tool(
226
229
"read_file",
227
230
dedent`Reads the source code for a given file.`,
228
231
fileSourceRequestSchema.shape,
232
+
{readOnlyHint: true},
229
233
async(request: FileSourceRequest)=>{
230
234
constresponse=awaitgetFileSource(request);
231
235
@@ -249,6 +253,7 @@ server.tool(
249
253
Returns a flat list of entries with path metadata and depth relative to the requested path.
250
254
`,
251
255
listTreeRequestSchema.shape,
256
+
{readOnlyHint: true},
252
257
async({
253
258
repo,
254
259
path ='',
@@ -395,6 +400,7 @@ server.tool(
395
400
"list_language_models",
396
401
dedent`Lists the available language models configured on the Sourcebot instance. Use this to discover which models can be specified when calling ask_codebase.`,
397
402
{},
403
+
{readOnlyHint: true},
398
404
async()=>{
399
405
constmodels=awaitlistLanguageModels();
400
406
@@ -424,6 +430,7 @@ server.tool(
424
430
This is a blocking operation that may take 30-60+ seconds for complex questions as the agent researches the codebase.
Copy file name to clipboardExpand all lines: packages/web/src/features/mcp/server.ts
+7Lines changed: 7 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -29,6 +29,10 @@ export function createMcpServer(): McpServer {
29
29
"list_language_models",
30
30
{
31
31
description: dedent`Lists the available language models configured on the Sourcebot instance. Use this to discover which models can be specified when calling ask_codebase.`,
0 commit comments