As a solo developer building UserJot, I was spending too much time on repetitive tasks. Between analyzing user feedback, doing keyword research, checking support tickets, and actually writing code, I barely had time to write code.
Then I discovered MCP (Model Context Protocol) and automated most of these tasks. Here's how you can do it too.
What is MCP?
MCP lets AI assistants like Claude interact with external tools and services. Instead of just chatting, Claude can:
- Read and write files on your computer
- Call APIs and web services
- Run terminal commands
- Access databases
- Basically run any code you write for it
Think of it as building custom functions that Claude can call when needed.
FastMCP Makes It Simple
While MCP is useful, setting up servers from scratch involves boilerplate code. FastMCP simplifies this process.
Here's a basic example:
import { FastMCP } from "fastmcp";
import { z } from "zod";
const server = new FastMCP({
name: "My Automation Server",
version: "1.0.0",
});
server.addTool({
name: "check_todos",
description: "Get my current todo list",
parameters: z.object({
status: z.enum(["pending", "completed", "all"]).default("pending"),
}),
execute: async (args) => {
// Your logic here to fetch todos
const todos = await fetchTodosFromNotion(args.status);
return todos.map(t => `- ${t.title}`).join('\n');
},
});
server.start({ transportType: "stdio" });
Now Claude can check your todos when you ask it to.
Tools I Built
Here are the MCP tools that actually saved me time:
1. Keyword Research
Instead of manually checking search volumes, I created a tool that pulls data from SEO APIs:
server.addTool({
name: "keyword_research",
description: "Research keywords for blog topics",
parameters: z.object({
topic: z.string(),
intent: z.enum(["informational", "commercial", "transactional"]),
}),
execute: async (args) => {
// Calls SEO APIs to get search volume, difficulty, related keywords
const data = await analyzeKeywords(args.topic, args.intent);
return formatKeywordReport(data);
},
});
Now I can ask: "Claude, research keywords for 'user feedback tools'" and get data in seconds instead of 15 minutes.
2. Support Ticket Summary
I used to spend 30 minutes each morning going through support emails. Now I have a tool that summarizes them:
server.addTool({
name: "analyze_support",
description: "Analyze recent support tickets",
parameters: z.object({
days: z.number().default(7),
urgentOnly: z.boolean().default(false),
}),
execute: async (args) => {
const tickets = await fetchSupportTickets(args);
return categorizeAndPrioritize(tickets);
},
});
3. Task Prioritization
A simple tool that helps me figure out what to work on next:
server.addTool({
name: "smart_todos",
description: "Manage and prioritize my development tasks",
parameters: z.object({
action: z.enum(["list", "add", "complete", "prioritize"]),
task: z.string().optional(),
category: z.enum(["feature", "bug", "refactor", "content"]).optional(),
}),
execute: async (args) => {
if (args.action === "prioritize") {
// Sorts tasks based on impact and urgency
return await prioritizeTasks();
}
// Handle other actions...
},
});
4. User Feedback Reader
This one connects to UserJot's API to pull feature requests:
server.addTool({
name: "top_feature_requests",
description: "Get the most requested features from UserJot",
parameters: z.object({
limit: z.number().default(10),
minVotes: z.number().default(5),
}),
execute: async (args) => {
const feedback = await userJotAPI.getFeatureRequests({
sortBy: "votes",
limit: args.limit,
threshold: args.minVotes,
});
return feedback.map(f =>
`${f.title} (${f.votes} votes)\n${f.description}`
).join('\n\n');
},
});
How I Use UserJot with MCP
UserJot is where I collect user feedback. Here's my current workflow:
- Users submit feedback on my UserJot board
- Other users vote on what's important
- My MCP tool reads the top requests
- I use this data to decide what to build next
We're working on native MCP support in UserJot. The goal is to make it easier to:
- Pull feature requests directly into your coding workflow
- Generate implementation plans based on user descriptions
- Track which feedback has been addressed
For example, you'll be able to ask Claude: "What's the top requested feature?" and have it automatically check UserJot, then help you implement it.
Setting It Up
- Install the dependencies:
npm install fastmcp zod
Create your server file (e.g.,
my-automation.ts
)Add it to Claude Desktop:
{
"mcpServers": {
"my-automation": {
"command": "npx",
"args": ["tsx", "/path/to/my-automation.ts"]
}
}
}
- Start using it
Actual Results
Since implementing these tools:
- I save about 2 hours daily on repetitive tasks
- I ship features faster because I spend less time on admin work
- I respond to support tickets quicker
- I make better decisions about what to build (based on real user data)
Each tool took about 30 minutes to build and test.
Getting Started
Pick one repetitive task that annoys you. Maybe it's:
- Checking multiple dashboards every morning
- Formatting data for reports
- Running the same API tests
- Categorizing emails or tickets
Build a simple MCP tool for it. The pattern is straightforward:
- Find the API for the service you want to automate
- Wrap it in a FastMCP server
- Connect it to Claude
- Use it instead of doing the task manually
Most services you already use have APIs: Notion, Linear, Slack, GitHub, etc. Each can become an MCP tool.
What's Next
The combination of AI assistants and programmable tools is changing how we work. Instead of context switching between a dozen apps, you can have Claude coordinate everything through MCP.
If you want to try this yourself, start with FastMCP. And if you're looking for a better way to collect and act on user feedback, check out UserJot - we're building tools to make the feedback-to-feature cycle much shorter.
The point isn't to replace developers. It's to spend less time on boring tasks and more time building things people actually want.
robotjot amirite (nice post, im going to copy some parts)