Skip to main content
Glama

writing_feedback

Analyze writing for clarity, grammar, style, and structure to improve essays, articles, and technical documentation with actionable feedback.

Instructions

Provides feedback on a piece of writing, such as an essay, article, or technical documentation, focusing on clarity, grammar, style, structure, and overall effectiveness.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textYesThe text to review
writing_typeYesThe type of writing (e.g., 'essay', 'article', 'documentation')

Implementation Reference

  • The main handler function that executes the tool logic: checks rate limits, validates and sanitizes inputs, constructs a specialized prompt using type-specific guidance, calls the Deepseek API, and formats the response or handles errors.
    export async function handler(args: unknown): Promise<ToolResponse> { // Check rate limit first if (!checkRateLimit()) { return { content: [ { type: 'text', text: 'Rate limit exceeded. Please try again later.', }, ], isError: true, }; } // Validate arguments if (!args || typeof args !== 'object') { return { content: [ { type: 'text', text: 'Invalid arguments provided.', }, ], isError: true, }; } try { // Type guard for WritingFeedbackArgs if (!('text' in args) || !('writing_type' in args) || typeof args.text !== 'string' || typeof args.writing_type !== 'string') { return { content: [ { type: 'text', text: 'Both text and writing_type are required and must be strings.', }, ], isError: true, }; } const typedArgs = args as WritingFeedbackArgs; // Sanitize inputs const sanitizedText = sanitizeInput(typedArgs.text); const sanitizedType = sanitizeInput(typedArgs.writing_type.toLowerCase()); // Get type-specific prompts const typePrompts = WRITING_TYPE_PROMPTS[sanitizedType] || WRITING_TYPE_PROMPTS.default; // Create the complete prompt const prompt = createPrompt( { ...BASE_PROMPT_TEMPLATE, template: BASE_PROMPT_TEMPLATE.template.replace( '{type_specific_prompts}', typePrompts ), }, { writing_type: sanitizedType, text: sanitizedText, } ); // Make the API call const response = await makeDeepseekAPICall(prompt, SYSTEM_PROMPT); if (response.isError) { return { content: [ { type: 'text', text: `Error generating writing feedback: ${response.errorMessage || 'Unknown error'}`, }, ], isError: true, }; } // Return the formatted response return { content: [ { type: 'text', text: response.text, }, ], }; } catch (error) { console.error('Writing feedback tool error:', error); return { content: [ { type: 'text', text: `Error processing writing feedback: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], isError: true, }; } }
  • ToolDefinition object including the inputSchema that defines the expected parameters (text and writing_type) for the writing_feedback tool.
    export const definition: ToolDefinition = { name: 'writing_feedback', description: 'Provides feedback on a piece of writing, such as an essay, article, or technical documentation, focusing on clarity, grammar, style, structure, and overall effectiveness.', inputSchema: { type: 'object', properties: { text: { type: 'string', description: 'The text to review', }, writing_type: { type: 'string', description: "The type of writing (e.g., 'essay', 'article', 'documentation')", }, }, required: ['text', 'writing_type'], }, };
  • src/server.ts:56-64 (registration)
    Registration of the writing_feedback tool by including its definition in the list returned for ListToolsRequest, making it discoverable by clients.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ secondOpinion.definition, codeReview.definition, designCritique.definition, writingFeedback.definition, brainstormEnhancements.definition, ], }));
  • src/server.ts:114-122 (registration)
    Dispatch logic in CallToolRequest handler that validates args using type guard and invokes the writing_feedback handler.
    case "writing_feedback": { if (!isWritingFeedbackArgs(args)) { throw new McpError( ErrorCode.InvalidParams, "Invalid parameters for writing feedback" ); } response = await writingFeedback.handler(args); break;
  • TypeScript interface defining the shape of arguments for the writing_feedback tool.
    export interface WritingFeedbackArgs { text: string; writing_type: string; }
  • Type guard function used in server.ts to validate incoming arguments before dispatching to the handler.
    export function isWritingFeedbackArgs(args: unknown): args is WritingFeedbackArgs { if (!args || typeof args !== 'object') return false; const a = args as Record<string, unknown>; return 'text' in a && 'writing_type' in a && typeof a.text === 'string' && typeof a.writing_type === 'string'; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyanheads/mentor-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server