Skip to main content
Glama
thenavidm

Buffer MCP Server

by thenavidm

List posts for an organization

get_posts
Read-onlyIdempotent

List posts for a Buffer organization in one GraphQL request with filters, sorting, and field selection; no automatic pagination.

Instructions

List posts for an organization. Current Buffer GraphQL posts. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200.

Input Schema

NameRequiredDescriptionDefault
sortNo
afterNoOpaque cursor from pageInfo.endCursor. One page per ordinary call.
firstNoLocal page-size cap 100, default 25; provider may impose additional query limits.
fieldsNoUpstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors.
filterNo
accountNoPrivate account profile name. Selects credentials only; an organization default does not restrict provider token permissions.
payloadNoComplete native input object instead of individual input fields.
payload_fileNoRegular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields.
organizationIdNoThe Organization id to fetch posts for

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed19 schema fields changedv3.0.1
    • addedInput schema / $defs
      Added value: +{
      +  "dueAt": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "end": {
      +        "description": "Include results with dates equal to or before\nthe specified date",
      +        "type": "string"
      +      },
      +      "start": {
      +        "description": "Include results with dates equal to or after\nthe specified date",
      +        "type": "string"
      +      }
      +    },
      +    "required": [],
      +    "type": "object"
      +  },
      +  "filter": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "channelIds": {
      +        "description": "When set, it will filter posts by channel",
      +        "items": {
      +          "description": "When set, it will filter posts by channel",
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "createdAt": {
      +        "$ref": "#/$defs/dueAt"
      +      },
      +      "dueAt": {
      +        "$ref": "#/$defs/dueAt"
      +      },
      +      "dueAtPresence": {
      +        "description": "When set, it will filter posts by whether their scheduled posting date exists.\n`absent` cannot be combined with `dueAt`, because absent dates cannot also match a date range.",
      +        "enum": [
      +          "absent",
      +          "present"
      +        ],
      +        "type": "string"
      +      },
      +      "endDate": {
      +        "description": "When set, it will return posts with createdAt or dueAt date before endDate",
      +        "type": "string"
      +      },
      +      "postTypes": {
      +        "description": "When set, it will filter posts by format.\n\n`post` is a fallback bucket rather than one stored format: it matches every\npost the other formats do not claim, which is what `Post.metadata.type`\nreports for the same post. `carousel` and `thread` are rejected, because no\nstored value resolves to them.",
      +        "items": {
      +          "description": "When set, it will filter posts by format.\n\n`post` is a fallback bucket rather than one stored format: it matches every\npost the other formats do not claim, which is what `Post.metadata.type`\nreports for the same post. `carousel` and `thread` are rejected, because no\nstored value resolves to them.",
      +          "enum": [
      +            "carousel",
      +            "event",
      +            "ghost_post",
      +            "offer",
      +            "post",
      +            "reel",
      +            "short",
      +            "story",
      +            "thread",
      +            "whats_new"
      +          ],
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "startDate": {
      +        "description": "When set, it will return posts with createdAt or dueAt date after startDate",
      +        "type": "string"
      +      },
      +      "status": {
      +        "description": "When set, it will filter posts by status",
      +        "items": {
      +          "description": "When set, it will filter posts by status",
      +          "enum": [
      +            "draft",
      +            "error",
      +            "needs_approval",
      +            "scheduled",
      +            "sending",
      +            "sent"
      +          ],
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "tagIds": {
      +        "description": "When set, it will filter posts by tag",
      +        "items": {
      +          "description": "When set, it will filter posts by tag",
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "tags": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "in": {
      +            "description": "Include results that have any of the specified tags (union/OR).",
      +            "items": {
      +              "description": "Include results that have any of the specified tags (union/OR).",
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "isEmpty": {
      +            "description": "When true, include results that have no tags assigned.\nCan be combined with 'in' for union filtering.\nDefaults to false if not specified.",
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "in"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [],
      +    "type": "object"
      +  },
      +  "sort": {
      +    "description": "The sort to apply to the posts results",
      +    "items": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "direction": {
      +          "description": "The direction to sort by.",
      +          "enum": [
      +            "asc",
      +            "desc"
      +          ],
      +          "type": "string"
      +        },
      +        "field": {
      +          "description": "The field to sort by.",
      +          "enum": [
      +            "dueAt",
      +            "createdAt"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "direction",
      +        "field"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  }
      +}
    • addedInput schema / properties / filter / $ref
      Added value: +"#/$defs/filter"
    • removedInput schema / properties / filter / additionalProperties
      Removed value: -false
    • removedInput schema / properties / filter / properties
      Removed value: -{
      -  "channelIds": {
      -    "description": "When set, it will filter posts by channel",
      -    "items": {
      -      "description": "When set, it will filter posts by channel",
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "createdAt": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "end": {
      -        "description": "Include results with dates equal to or before\nthe specified date",
      -        "type": "string"
      -      },
      -      "start": {
      -        "description": "Include results with dates equal to or after\nthe specified date",
      -        "type": "string"
      -      }
      -    },
      -    "required": [],
      -    "type": "object"
      -  },
      -  "dueAt": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "end": {
      -        "description": "Include results with dates equal to or before\nthe specified date",
      -        "type": "string"
      -      },
      -      "start": {
      -        "description": "Include results with dates equal to or after\nthe specified date",
      -        "type": "string"
      -      }
      -    },
      -    "required": [],
      -    "type": "object"
      -  },
      -  "dueAtPresence": {
      -    "description": "When set, it will filter posts by whether their scheduled posting date exists.\n`absent` cannot be combined with `dueAt`, because absent dates cannot also match a date range.",
      -    "enum": [
      -      "absent",
      -      "present"
      -    ],
      -    "type": "string"
      -  },
      -  "endDate": {
      -    "description": "When set, it will return posts with createdAt or dueAt date before endDate",
      -    "type": "string"
      -  },
      -  "postTypes": {
      -    "description": "When set, it will filter posts by format.\n\n`post` is a fallback bucket rather than one stored format: it matches every\npost the other formats do not claim, which is what `Post.metadata.type`\nreports for the same post. `carousel` and `thread` are rejected, because no\nstored value resolves to them.",
      -    "items": {
      -      "description": "When set, it will filter posts by format.\n\n`post` is a fallback bucket rather than one stored format: it matches every\npost the other formats do not claim, which is what `Post.metadata.type`\nreports for the same post. `carousel` and `thread` are rejected, because no\nstored value resolves to them.",
      -      "enum": [
      -        "carousel",
      -        "event",
      -        "ghost_post",
      -        "offer",
      -        "post",
      -        "reel",
      -        "short",
      -        "story",
      -        "thread",
      -        "whats_new"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "startDate": {
      -    "description": "When set, it will return posts with createdAt or dueAt date after startDate",
      -    "type": "string"
      -  },
      -  "status": {
      -    "description": "When set, it will filter posts by status",
      -    "items": {
      -      "description": "When set, it will filter posts by status",
      -      "enum": [
      -        "draft",
      -        "error",
      -        "needs_approval",
      -        "scheduled",
      -        "sending",
      -        "sent"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "tagIds": {
      -    "description": "When set, it will filter posts by tag",
      -    "items": {
      -      "description": "When set, it will filter posts by tag",
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "tags": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "in": {
      -        "description": "Include results that have any of the specified tags (union/OR).",
      -        "items": {
      -          "description": "Include results that have any of the specified tags (union/OR).",
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "isEmpty": {
      -        "description": "When true, include results that have no tags assigned.\nCan be combined with 'in' for union filtering.\nDefaults to false if not specified.",
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "in"
      -    ],
      -    "type": "object"
      -  }
      -}
    • removedInput schema / properties / filter / required
      Removed value: -[]
    • removedInput schema / properties / filter / type
      Removed value: -"object"
    • addedInput schema / properties / payload / properties / filter / $ref
      Added value: +"#/$defs/filter"
    • removedInput schema / properties / payload / properties / filter / additionalProperties
      Removed value: -false
    • removedInput schema / properties / payload / properties / filter / properties
      Removed value: -{
      -  "channelIds": {
      -    "description": "When set, it will filter posts by channel",
      -    "items": {
      -      "description": "When set, it will filter posts by channel",
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "createdAt": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "end": {
      -        "description": "Include results with dates equal to or before\nthe specified date",
      -        "type": "string"
      -      },
      -      "start": {
      -        "description": "Include results with dates equal to or after\nthe specified date",
      -        "type": "string"
      -      }
      -    },
      -    "required": [],
      -    "type": "object"
      -  },
      -  "dueAt": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "end": {
      -        "description": "Include results with dates equal to or before\nthe specified date",
      -        "type": "string"
      -      },
      -      "start": {
      -        "description": "Include results with dates equal to or after\nthe specified date",
      -        "type": "string"
      -      }
      -    },
      -    "required": [],
      -    "type": "object"
      -  },
      -  "dueAtPresence": {
      -    "description": "When set, it will filter posts by whether their scheduled posting date exists.\n`absent` cannot be combined with `dueAt`, because absent dates cannot also match a date range.",
      -    "enum": [
      -      "absent",
      -      "present"
      -    ],
      -    "type": "string"
      -  },
      -  "endDate": {
      -    "description": "When set, it will return posts with createdAt or dueAt date before endDate",
      -    "type": "string"
      -  },
      -  "postTypes": {
      -    "description": "When set, it will filter posts by format.\n\n`post` is a fallback bucket rather than one stored format: it matches every\npost the other formats do not claim, which is what `Post.metadata.type`\nreports for the same post. `carousel` and `thread` are rejected, because no\nstored value resolves to them.",
      -    "items": {
      -      "description": "When set, it will filter posts by format.\n\n`post` is a fallback bucket rather than one stored format: it matches every\npost the other formats do not claim, which is what `Post.metadata.type`\nreports for the same post. `carousel` and `thread` are rejected, because no\nstored value resolves to them.",
      -      "enum": [
      -        "carousel",
      -        "event",
      -        "ghost_post",
      -        "offer",
      -        "post",
      -        "reel",
      -        "short",
      -        "story",
      -        "thread",
      -        "whats_new"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "startDate": {
      -    "description": "When set, it will return posts with createdAt or dueAt date after startDate",
      -    "type": "string"
      -  },
      -  "status": {
      -    "description": "When set, it will filter posts by status",
      -    "items": {
      -      "description": "When set, it will filter posts by status",
      -      "enum": [
      -        "draft",
      -        "error",
      -        "needs_approval",
      -        "scheduled",
      -        "sending",
      -        "sent"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "tagIds": {
      -    "description": "When set, it will filter posts by tag",
      -    "items": {
      -      "description": "When set, it will filter posts by tag",
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "tags": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "in": {
      -        "description": "Include results that have any of the specified tags (union/OR).",
      -        "items": {
      -          "description": "Include results that have any of the specified tags (union/OR).",
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "isEmpty": {
      -        "description": "When true, include results that have no tags assigned.\nCan be combined with 'in' for union filtering.\nDefaults to false if not specified.",
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "in"
      -    ],
      -    "type": "object"
      -  }
      -}
    • removedInput schema / properties / payload / properties / filter / required
      Removed value: -[]
    • removedInput schema / properties / payload / properties / filter / type
      Removed value: -"object"
    • addedInput schema / properties / payload / properties / sort / $ref
      Added value: +"#/$defs/sort"
    • removedInput schema / properties / payload / properties / sort / description
      Removed value: -"The sort to apply to the posts results"
    • removedInput schema / properties / payload / properties / sort / items
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "direction": {
      -      "description": "The direction to sort by.",
      -      "enum": [
      -        "asc",
      -        "desc"
      -      ],
      -      "type": "string"
      -    },
      -    "field": {
      -      "description": "The field to sort by.",
      -      "enum": [
      -        "dueAt",
      -        "createdAt"
      -      ],
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "direction",
      -    "field"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / payload / properties / sort / type
      Removed value: -"array"
    • addedInput schema / properties / sort / $ref
      Added value: +"#/$defs/sort"
    • removedInput schema / properties / sort / description
      Removed value: -"The sort to apply to the posts results"
    • removedInput schema / properties / sort / items
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "direction": {
      -      "description": "The direction to sort by.",
      -      "enum": [
      -        "asc",
      -        "desc"
      -      ],
      -      "type": "string"
      -    },
      -    "field": {
      -      "description": "The field to sort by.",
      -      "enum": [
      -        "dueAt",
      -        "createdAt"
      -      ],
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "direction",
      -    "field"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / sort / type
      Removed value: -"array"
  2. First observedv2.0.0

TDQS

B3.4/5.0
Behavior3/5

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

Annotations cover readOnly/idempotent/openWorld. Description adds value: 'One request, no automatic pagination', 'provider errors are failures even with HTTP 200', and cursor guidance. However, does not state default page size, field bounding behavior, or count/limit implications beyond schema.

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?

Four short sentences, front-loaded purpose then operational notes. Efficient, though slightly telegraphic.

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

Completeness3/5

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

Covers pagination posture and error semantics, but for a 9-param read tool with nested objects, it omits guidance on filter combinations vs payload/payload_file mutually exclusive modes, account vs organizationId interplay, and field bounding behavior. Adequate but gaps remain.

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

Parameters3/5

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

Schema coverage 78% with strong param descriptions. Description mentions 'Use upstream fields to bound data' and cursor/one-page behavior, adding some meaning beyond schema. Baseline 3 appropriate since schema does most heavy lifting.

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

Purpose4/5

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

States specific verb+resource: 'List posts for an organization.' Clear what it does and on which resource. Does not explicitly differentiate from siblings like get_post or get_aggregated_post_metrics, but the scope (posts for an organization, plural list) is clear.

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?

Implies usage via 'Current Buffer GraphQL posts. One request, no automatic pagination.' but does not state when to use this vs get_post (single) or alternatives. No explicit exclusions or when-not-to-use guidance.

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