Twitter MCP Server
# mcp-server ![NPM Version](https://img.shields.io/npm/v/%40agentico%2Fmcp-server)
MCP Server is a simple server that implements the Model Context Protocol (MCP) to provide a **simpler API** to interact with the Model Context Protocol.
## Why Use This Server?
In "[La Rebelion](https://rebelion.la)" we are working on a set of tools and services to simplify processes and workflows for a better and more efficient developer experience. This server is part of a set of tools.
MCP is amazing, but it can be a bit confusing to get started. We have create a **[facade](https://refactoring.guru/design-patterns/facade)** to simplify the process of creating a server that implements the Model Context Protocol. The pattern is simple, you just need to create the `tools` with your own logic, register the tools and start the server.
## Steps to Create a New Server
In the future we will provide a CLI to create a new server similar to [MCP create server](https://www.npmjs.com/package/@modelcontextprotocol/create-server), but for now you can follow the steps below based on the [official documentation to create a server](https://modelcontextprotocol.io/quickstart/server).
```bash
mkdir -p my-server/src
cd my-server/
yarn init -y
yarn add @modelcontextprotocol/sdk zod zod-to-json-schema
yarn add -D @types/node typescript
# Here lies the magic
yarn add @agentico/mcp-server
```
You need to update the `package.json` file and create a `tsconfig.json` file.
## Getting Started
Implement your tools with your custom logic, and register them in the MCPServer. Here is an example of a simple `echo` tool:
```typescript
import { Tool, ToolSchema } from "@agentico/mcp-server";
export class EchoTool extends Tool {
toolSchema: ToolSchema = {
name: "echo",
description: "Echoes the input message",
schema: { // the schema for the parameters needed by the tool
type: "object",
properties: {
message: { type: "string" },
},
required: ["message"],
},
};
/**
* Your logic here, implement the execute method to define the tool behavior
* @param input The input message - use the schema to define the input type
* @returns In the example, we are echoing the message
*/
async execute(input: any): Promise<any> {
// This is a simple echo tool demo, nothing fancy, just echoing the message
return Promise.resolve({
content: [
{
type: "text",
text: `${input.message}`
}
]
});
}
}
```
Create an `index.ts` file with the following content:
```typescript
#!/usr/bin/env node
import { MCPServer } from '@agentico/mcp-server'
import { EchoTool } from "./tools/EchoTool.js";
const myServer = new MCPServer('My MCP Server', '1.0.0');
async function main() {
// Register tools
myServer.registerTool("echo", EchoTool);
await myServer.run();
}
main().catch((error) => {
console.error("Server error:", error);
process.exit(1);
});
```
That's it! You have created a simple server that implements the Model Context Protocol. Test it with [Claude Desktop](https://claude.ai/download) or any other client that supports MCP.
Build the project with the following command:
```bash
yarn build
```
You can start the server, but has no logic yet, you can test it with the following command:
```bash
yarn start
# or
node build/index.js
```
That's it, start creating your own tools and services to simplify your workflows and processes.
Go Rebels! ✊🏻
## UML Diagram
![UML Diagram](./mcp-server.png)
* **MCPServer**: Registers the tools that will be used by the server.
* **Tool**: Base class for all tools, containing common properties and methods. `execute` is the method that will be called when the tool is invoked, implement your logic here.
* **EchoTool**: Specific implementation of a tool, extending the Tool class and defining its own schema and initialization logic.
* **EchoSchema**: Defines the structure of the input for the EchoTool.
* **EchoInput**: Type definition for the input based on the schema.
This pattern allows for a flexible and extensible way to manage and implement tools using the MCPServer and Tool classes.
## Support Us
If you find this useful, please consider supporting us by starring this repository, by contributing to the project or by becoming a sponsor.
You can find more information on how to support us at [La Rebelion GitHub Sponsors](https://github.com/sponsors/la-rebelion). Also [buying us a coffee](https://buymeacoffee.com/larebelion), [PayPal](https://www.paypal.com/donate?hosted_button_id=7CV28AHGL9ZZY) are great ways to support us or purchasing ["La Rebelion" merch](https://go.rebelion.la/merch).
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.