CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-modelcontextprotocol--sdk

TypeScript SDK for implementing the Model Context Protocol, enabling developers to build MCP servers and clients with support for multiple transports, tools, resources, prompts, and authentication

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

server-prompts.mddocs/

Server Prompts API

Prompts are reusable conversation templates for LLM interactions. Designed to be user-driven (e.g., slash commands, conversation starters).

Registration

server.registerPrompt<Args extends PromptArgsRawShape>(
  name: string,
  config: {
    title?: string;
    description?: string;
    argsSchema?: Args;
    icons?: Icons;
    _meta?: Record<string, unknown>;
  },
  callback: (args: z.infer<ZodObject<Args>>) => GetPromptResult | Promise<GetPromptResult>
): RegisteredPrompt;

Examples

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { z } from 'zod';

const server = new McpServer({ name: 'prompts-server', version: '1.0.0' });

// Simple prompt without arguments
server.registerPrompt('code-review', {
  title: 'Code Review',
  description: 'Review code for best practices'
}, () => ({
  messages: [{
    role: 'user',
    content: { type: 'text', text: 'Please review my code for best practices and potential issues.' }
  }]
}));

// Prompt with arguments
server.registerPrompt('analyze-file', {
  title: 'Analyze File',
  description: 'Analyze a specific file',
  argsSchema: {
    filePath: z.string().describe('Path to the file'),
    analysisType: z.enum(['security', 'performance', 'style']).describe('Type of analysis to perform')
  }
}, ({ filePath, analysisType }) => ({
  description: `Analyze ${filePath} for ${analysisType}`,
  messages: [{
    role: 'user',
    content: { type: 'text', text: `Please analyze ${filePath} focusing on ${analysisType} aspects.` }
  }]
}));

// Prompt with embedded resources
server.registerPrompt('review-code-with-context', {
  title: 'Code Review with Context',
  description: 'Review code with full context',
  argsSchema: {
    code: z.string().describe('Code to review')
  }
}, ({ code }) => ({
  messages: [
    { role: 'user', content: { type: 'text', text: 'Please review this code:' } },
    { role: 'user', content: { type: 'resource', resource: { uri: 'inline://code', mimeType: 'text/plain', text: code } } }
  ]
}));

// Multi-turn conversation
server.registerPrompt('interactive-review', {
  title: 'Interactive Code Review',
  description: 'Start an interactive code review session'
}, () => ({
  description: 'Interactive code review',
  messages: [
    { role: 'user', content: { type: 'text', text: 'I need help reviewing some code' } },
    { role: 'assistant', content: { type: 'text', text: 'I\'d be happy to help! Please share the code you\'d like me to review.' } }
  ]
}));

Argument Completion

import { completable } from '@modelcontextprotocol/sdk/server/completable.js';

// completable<T>(schema: ZodType<T>, completeCallback: CompleteCallback<T>): Completable<T>
type CompleteCallback<T> = (value: string, context?: { arguments?: Record<string, unknown> }) => Promise<string[]> | string[];

Example

server.registerPrompt('team-greeting', {
  title: 'Team Greeting',
  description: 'Generate a greeting for team members',
  argsSchema: {
    department: completable(z.string(), (value) => {
      return ['engineering', 'sales', 'marketing', 'support'].filter(d => d.startsWith(value));
    }),
    name: completable(z.string(), (value, context) => {
      // Provide name suggestions based on selected department
      const department = context?.arguments?.['department'];
      if (department === 'engineering') {
        return ['Alice', 'Bob', 'Charlie'].filter(n => n.startsWith(value));
      } else if (department === 'sales') {
        return ['David', 'Eve', 'Frank'].filter(n => n.startsWith(value));
      }
      return ['Guest'].filter(n => n.startsWith(value));
    })
  }
}, ({ department, name }) => ({
  messages: [{
    role: 'assistant',
    content: { type: 'text', text: `Hello ${name}, welcome to the ${department} team!` }
  }]
}));

Return Values

interface GetPromptResult {
  description?: string;
  messages: PromptMessage[];
  _meta?: Record<string, unknown>;
}

interface PromptMessage {
  role: 'user' | 'assistant';
  content: ContentBlock;  // TextContent | ImageContent | AudioContent | EmbeddedResource
}

Examples

// Simple text prompt
return {
  messages: [{ role: 'user', content: { type: 'text', text: 'Analyze this data for trends' } }]
};

// Prompt with image
return {
  messages: [{ role: 'user', content: { type: 'image', data: base64ImageData, mimeType: 'image/png' } }]
};

// Prompt with embedded resource
return {
  messages: [{
    role: 'user',
    content: {
      type: 'resource',
      resource: { uri: 'file:///project/README.md', mimeType: 'text/markdown', text: readmeContent }
    }
  }]
};

Managing Prompts

interface RegisteredPrompt {
  enable(): void;
  disable(): void;
  update(config: Partial<{ title?: string; description?: string; argsSchema?: PromptArgsRawShape; }>): void;
  remove(): void;
}

Notifications

server.sendPromptListChanged(): Promise<void>;

Types Reference

interface Prompt {
  name: string;
  title?: string;
  description?: string;
  arguments?: PromptArgument[];
  icons?: Icons;
  _meta?: Record<string, unknown>;
}

interface PromptArgument {
  name: string;
  description?: string;
  required?: boolean;
}

interface ListPromptsResult {
  prompts: Prompt[];
  nextCursor?: string;
}

type PromptArgsRawShape = Record<string, ZodTypeAny>;

Legacy API

server.prompt(name: string, callback: PromptCallback): RegisteredPrompt;
server.prompt(name: string, description: string, callback: PromptCallback): RegisteredPrompt;
server.prompt<Args extends PromptArgsRawShape>(name: string, argsSchema: Args, callback: PromptCallback<Args>): RegisteredPrompt;
server.prompt<Args extends PromptArgsRawShape>(name: string, description: string, argsSchema: Args, callback: PromptCallback<Args>): RegisteredPrompt;

Use registerPrompt for new code.

docs

authentication.md

client.md

index.md

server-advanced.md

server-prompts.md

server-resources.md

server-tools.md

transports.md

types.md

tile.json