Skip to main content
Glama

plurk_post

Create new Plurk posts with secure authentication while automatically enforcing daily posting limits to maintain controlled social media activity.

Instructions

Create a new Plurk post for the supplied credentials while enforcing the server-side daily post quota.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
credentialsYes
contentYes
qualifierNo

Implementation Reference

  • The createPlurk method in PlurkApplication implements the core logic for the plurk_post tool, including input sanitization, policy enforcement, API interaction, and auditing.
    public async createPlurk(
      adapterSource: AdapterSource,
      credentials: PlurkCredentialsInput,
      input: { readonly content: string; readonly qualifier?: string },
    ): Promise<WriteResult> {
      const trimmedContent = input.content.trim();
      if (trimmedContent.length === 0) {
        throw new ServiceError("validation", "content must not be empty");
      }
    
      const actionId = randomUUID();
      let account: AuthenticatedAccount | undefined;
      try {
        const context = await this.resolveAccountContext(credentials);
        account = context.account;
    
        await this.policyService.assertCanCreatePost(context.account);
        const result = await context.client.createPlurk({
          content: trimmedContent,
          qualifier: input.qualifier,
        });
    
        await this.policyService.recordSuccessfulPost(context.account);
        await this.auditLogStore.append(
          buildAuditEvent({
            timestamp: new Date().toISOString(),
            adapterSource,
            eventType: "write.success",
            actionId,
            actionType: "create-plurk",
            account,
            requestSummary: { qualifier: input.qualifier ?? ":", contentLength: trimmedContent.length },
            targetIds: { plurkId: result.plurkId, threadId: result.plurkId },
            result: summarizeWriteResult(result),
          }),
        );
    
        return result;
      } catch (error) {
        await this.handleWriteFailure(error, {
          adapterSource,
          actionId,
          actionType: "create-plurk",
          account,
          requestSummary: { qualifier: input.qualifier ?? ":", contentLength: trimmedContent.length },
        });
        throw error;
      }
    }
  • The plurk_post tool is registered in the tool catalog with its description, schema, and execution call to application.createPlurk.
      name: "plurk_post",
      description:
        "Create a new Plurk post for the supplied credentials while enforcing the server-side daily post quota.",
      inputSchema: z.object({
        credentials: credentialsSchema,
        content: z.string().min(1),
        qualifier: z.string().min(1).max(12).optional(),
      }),
      execute: async ({ credentials, content, qualifier }) =>
        application.createPlurk("mcp", credentials, { content, qualifier }),
    },
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It successfully notes the quota enforcement mechanism, but omits other critical mutation behaviors: error handling when quotas are exceeded, whether the operation is idempotent, and what side effects occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded with the action ('Create') and avoids redundancy. However, given the complex nested auth schema and 0% coverage, extreme brevity becomes a liability rather than a virtue.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write operation with complex authentication, platform-specific jargon ('qualifier'), and no output schema, the description is incomplete. It misses credential field explanations, valid qualifier values, return structure, and error scenarios essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description fails to compensate. It vaguely references 'supplied credentials' without explaining the four nested OAuth fields (appKey, appSecret, etc.), completely ignores the 'qualifier' parameter (a Plurk-specific concept), and provides no formatting guidance for 'content'. This is a significant documentation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Create') and resource ('Plurk post'), clearly distinguishing it from the sibling 'get' tools (alerts, me, mentions, thread) and the 'reply' tool. It establishes this as the primary content creation entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions the 'server-side daily post quota' which provides implicit usage context (rate limiting exists), but it lacks explicit guidance on when to use this versus plurk_reply or prerequisites like required OAuth scopes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other 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/congcongfu/plurk-mcp'

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