Skip to main content
Glama
2389-research

MCP Agent Social Media Server

server.test.ts6.41 kB
// ABOUTME: Tests for the MCP server initialization and basic functionality // ABOUTME: Validates server setup, tool registration, and error handling import { McpServer } from '@modelcontextprotocol/sdk/server/mcp'; import { z } from 'zod'; describe('MCP Agent Social Server', () => { let server: McpServer; beforeEach(async () => { // Set up required environment variables process.env.SOCIAL_API_BASE_URL = 'https://api.example.com'; process.env.SOCIAL_API_KEY = 'test-key'; process.env.TEAM_NAME = 'test-team'; // Create server server = new McpServer({ name: 'mcp-agent-social', version: '1.0.3', }); // Register tools server.registerTool( 'login', { description: 'Authenticate and set agent identity for the session', inputSchema: { agent_name: z.string().describe('The name of the agent logging in'), }, }, async ({ agent_name }) => { // Simulate the login functionality const sessionId = `test-session-${Date.now()}`; return { content: [ { type: 'text', text: JSON.stringify({ success: true, agent_name: agent_name, team_name: 'test-team', session_id: sessionId, }), }, ], }; }, ); server.registerTool( 'read_posts', { description: "Retrieve posts from the team's social feed", inputSchema: { limit: z.number().optional().default(10).describe('Maximum number of posts to retrieve'), offset: z.number().optional().default(0).describe('Number of posts to skip'), }, }, async ({ limit, offset }) => { return { content: [ { type: 'text', text: JSON.stringify({ posts: [], limit, offset, }), }, ], }; }, ); server.registerTool( 'create_post', { description: 'Create a new post or reply within the team', inputSchema: { content: z.string().describe('The content of the post'), tags: z.array(z.string()).optional().describe('Optional tags for the post'), }, }, async ({ content, tags }) => { return { content: [ { type: 'text', text: JSON.stringify({ success: false, error: 'Not implemented yet', content, tags, }), }, ], }; }, ); }); afterEach(async () => { if (server) { await server.close(); } }); describe('Server Creation', () => { it('should create server with correct configuration', () => { expect(server).toBeDefined(); expect(server).toBeInstanceOf(McpServer); }); }); describe('Tool Registration', () => { it('should successfully register login tool', () => { // Tool registration happens in beforeEach // If no error is thrown, registration was successful expect(true).toBe(true); }); it('should successfully register read_posts tool', () => { // Tool registration happens in beforeEach // If no error is thrown, registration was successful expect(true).toBe(true); }); it('should successfully register create_post tool', () => { // Tool registration happens in beforeEach // If no error is thrown, registration was successful expect(true).toBe(true); }); }); describe('Tool Handler Functions', () => { it('login handler should return expected format', async () => { const loginHandler = async ({ agent_name }: { agent_name: string }) => { return { content: [ { type: 'text', text: JSON.stringify({ success: true, agent_name, team_name: 'test-team', session_id: `test-session-${Date.now()}`, }), }, ], }; }; const result = await loginHandler({ agent_name: 'test-agent' }); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe('text'); const parsed = JSON.parse(result.content[0].text); expect(parsed).toMatchObject({ success: true, agent_name: 'test-agent', team_name: 'test-team', }); expect(parsed.session_id).toBeDefined(); }); it('read_posts handler should return expected format', async () => { const readPostsHandler = async ({ limit, offset }: { limit: number; offset: number }) => { return { content: [ { type: 'text', text: JSON.stringify({ posts: [], error: 'Not implemented yet', limit, offset, }), }, ], }; }; const result = await readPostsHandler({ limit: 5, offset: 0 }); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe('text'); const parsed = JSON.parse(result.content[0].text); expect(parsed).toMatchObject({ posts: [], limit: 5, offset: 0, }); }); it('create_post handler should return expected format', async () => { const createPostHandler = async ({ content, tags }: { content: string; tags?: string[] }) => { return { content: [ { type: 'text', text: JSON.stringify({ success: false, error: 'Not implemented yet', content, tags, }), }, ], }; }; const result = await createPostHandler({ content: 'Test post', tags: ['test', 'example'], }); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe('text'); const parsed = JSON.parse(result.content[0].text); expect(parsed).toMatchObject({ success: false, error: 'Not implemented yet', content: 'Test post', tags: ['test', 'example'], }); }); }); });

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/2389-research/mcp-socialmedia'

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