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
4 changed files with 16 additions and 0 deletions

View file

@ -48,6 +48,7 @@ const PromptsTab = ({
ref: PromptReference | ResourceReference,
argName: string,
value: string,
context?: Record<string, string>,
) => Promise<string[]>;
completionsSupported: boolean;
promptContent: string;

View file

@ -52,6 +52,7 @@ const ResourcesTab = ({
ref: ResourceReference | PromptReference,
argName: string,
value: string,
context?: Record<string, string>,
) => Promise<string[]>;
completionsSupported: boolean;
resourceContent: string;
@ -94,6 +95,7 @@ const ResourcesTab = ({
},
key,
value,
templateValues,
);
}
};

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,