feat: Add context argument to completion handlers

This commit adds a `context` argument to the completion handlers in `PromptsTab`, `ResourcesTab`, `useCompletionState`, and `useConnection`.

The context argument allows passing additional information to the completion engine, which can be used to improve the quality of the completions.  The context is passed as a dictionary of key-value pairs.

The `ResourcesTab` component was also updated to pass `templateValues` as the `context` to the completion handler.

The `useConnection` hook was updated to include the context in the completion request sent to the server.
This commit is contained in:
Dennis Geurts 2025-07-12 12:42:21 +02:00
commit de474e5411
2 changed files with 16 additions and 0 deletions

View file

@ -28,6 +28,7 @@ export function useCompletionState(
ref: ResourceReference | PromptReference,
argName: string,
value: string,
context?: Record<string, string>,
signal?: AbortSignal,
) => Promise<string[]>,
completionsSupported: boolean = true,
@ -66,6 +67,7 @@ export function useCompletionState(
ref: ResourceReference | PromptReference,
argName: string,
value: string,
context?: Record<string, string>,
) => {
if (!completionsSupported) {
return;
@ -82,10 +84,13 @@ export function useCompletionState(
}));
try {
console.log(state);
const values = await handleCompletion(
ref,
argName,
value,
context,
abortController.signal,
);
@ -97,6 +102,7 @@ export function useCompletionState(
}));
}
} catch {
console.error("completion failed");
if (!abortController.signal.aborted) {
setState((prev) => ({
...prev,

View file

@ -170,6 +170,7 @@ export function useConnection({
ref: ResourceReference | PromptReference,
argName: string,
value: string,
context?: Record<string, string>,
signal?: AbortSignal,
): Promise<string[]> => {
if (!mcpClient || !completionsSupported) {
@ -187,6 +188,12 @@ export function useConnection({
},
};
if (context) {
request["params"]["context"] = {
arguments: context,
};
}
try {
const response = await makeRequest(request, CompleteResultSchema, {
signal,