Skip to main content
Glama
brianellin

Bluesky MCP Server

by brianellin

like-post

Like a specific post on Bluesky using its URI. Part of the Bluesky MCP Server, enabling AI assistants to interact with social features on the ATProtocol platform.

Instructions

Like a post on Bluesky

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
uriYesThe URI of the post to like

Implementation Reference

  • Handler function that fetches the post thread to get the CID and then calls agent.like() to like the post.
    async ({ uri }) => {
      if (!agent) {
        return mcpErrorResponse("Not logged in. Please check your environment variables.");
      }
    
      try {
        // First, we need to get the CID of the post
        const parts = uri.split('/');
        const repo = parts[2]; // The DID
        const collection = parts[4]; // Usually app.bsky.feed.post
        const rkey = parts[5]; // The record key
        
        const response = await agent.app.bsky.feed.getPostThread({ uri });
        
        if (!response.success || response.data.thread.$type !== 'app.bsky.feed.defs#threadViewPost') {
          return mcpErrorResponse("Failed to get post information.");
        }
        
        // Type assertion to tell TypeScript this is a post
        const threadPost = response.data.thread as any;
        const post = threadPost.post;
        const cid = post.cid;
        
        await agent.like(uri, cid);
        
        return mcpSuccessResponse("Post liked successfully!");
      } catch (error) {
        return mcpErrorResponse(`Error liking post: ${error instanceof Error ? error.message : String(error)}`);
      }
    }
  • Input schema defining the 'uri' parameter as a string with description.
      uri: z.string().describe("The URI of the post to like"),
    },
  • src/index.ts:642-678 (registration)
    Registration of the 'like-post' tool using server.tool(), including name, description, schema, and handler.
    server.tool(
      "like-post",
      "Like a post on Bluesky",
      {
        uri: z.string().describe("The URI of the post to like"),
      },
      async ({ uri }) => {
        if (!agent) {
          return mcpErrorResponse("Not logged in. Please check your environment variables.");
        }
    
        try {
          // First, we need to get the CID of the post
          const parts = uri.split('/');
          const repo = parts[2]; // The DID
          const collection = parts[4]; // Usually app.bsky.feed.post
          const rkey = parts[5]; // The record key
          
          const response = await agent.app.bsky.feed.getPostThread({ uri });
          
          if (!response.success || response.data.thread.$type !== 'app.bsky.feed.defs#threadViewPost') {
            return mcpErrorResponse("Failed to get post information.");
          }
          
          // Type assertion to tell TypeScript this is a post
          const threadPost = response.data.thread as any;
          const post = threadPost.post;
          const cid = post.cid;
          
          await agent.like(uri, cid);
          
          return mcpSuccessResponse("Post liked successfully!");
        } catch (error) {
          return mcpErrorResponse(`Error liking post: ${error instanceof Error ? error.message : String(error)}`);
        }
      }
    );

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Related Tools

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/brianellin/bsky-mcp-server'

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