User Management MCP Server
# Model Context Protocol (MCP) Learning Notes
## Video Reference
- **Source**: [Web Dev Simplified YouTube Video](https://youtu.be/ZoZxQwp1PiM?si=F2Wb-wrBPOkBmKkz)
- **Credits**: Web Dev Simplified (YouTube channel)
## What is MCP?
Model Context Protocol (MCP) is a protocol that defines how a client (such as an LLM) can communicate and use tools and resources defined at the server level. It implements a client-server architecture with the following components:
- Tools
- Resources
- Prompts
- Samplings
## Documentation & Resources
- Official documentation: [modelcontextprotocol.io/introduction](https://modelcontextprotocol.io/introduction)
- Includes starter projects in multiple languages for MCP client and server implementation
## Implementation Details
### Server Setup
The `src/server.ts` file contains the code for creating an MCP server and defining tools, resources, and prompts.
### Testing the Implementation
1. Build the server:
```bash
npm run server:build
```
2. Add to VS Code using the "Add MCP server" command
3. Access server functionality in the Copilot chat UI
4. Use "#" followed by tool name to access implemented tools

### Client Implementation
Note: to use the query and prompts from the client you will need a gemini ai api key, you can add this in the .env file
The `src/client.ts` file provides a CLI client for interacting with the MCP server. It connects to the server, lists available tools, resources, and prompts, and allows you to:
- Query the LLM directly
- Run tools (with parameter input)
- Access resources (with dynamic URI parameters)
- Use prompts (with argument input)
#### How it works
1. Connects to the MCP server using a transport layer.
2. Fetches available tools, resources, prompts, and resource templates.
3. Presents a menu for the user to select an action: Query, Tools, Resources, or Prompts.
4. Handles each action:
- **Query**: Sends a prompt to the LLM and optionally invokes tools.
- **Tools**: Lets you select and run a tool, entering parameters as needed.
- **Resources**: Lets you select a resource or template, entering URI parameters if required, and displays the result.
- **Prompts**: Lets you select a prompt, enter arguments, and view the generated output.
5. For prompts, you can choose to run the generated text through the LLM for further results.
#### Example Usage
When you run the client, you'll see a menu:
```
What would you like to do
❯ Query
Tools
Resources
Prompts
```
Selecting an option will guide you through the available features interactively.
#### Resources
- **users**: Retrieves all users from the JSON file
- **user-details**: Retrieves user details by ID
#### Tools
- **create-user**: Creates a new user with the following parameters:
- username
- email
- address
- age
- phone number
- **create-random-user**: Generates and creates a random user
#### Prompts
- **generate-fake-user**: Prompt with fixed fields for generating fake user data
#### Sampling
- **create-random-user**: This uses sampling i.e. calling requests on the LLM or clientto generate something.
TDQS
Scored across 2 tools
The two tools have highly overlapping purposes: both create users. 'create-random-user' and 'create-user' differ only in the data source (fake vs. system), which is a subtle distinction that agents will likely confuse. This is a classic case of ambiguous tool boundaries.
Both tools follow a consistent verb_noun pattern with hyphen-separated names. 'create-random-user' and 'create-user' are perfectly aligned in naming style, making them predictable and readable.
With only 2 tools, the server feels severely under-scoped for a 'User Management' domain. A user management system typically requires at least CRUD operations (create, read, update, delete) and possibly list/search tools. This minimal set is inadequate for the implied purpose.
The tool surface is extremely incomplete for user management. There are no tools to retrieve, update, delete, or list users, creating significant gaps that will cause agent failures. Agents cannot perform basic user management workflows beyond creation.