Skip to main content
Glama

Get a LinkedIn post's comments

linkedin_get_comments
Read-onlyIdempotent

The comments LinkedIn shows on one post, each with the commenter's profile URL.

Use when: pulling the people who engaged with a post: a competitor's launch, a thought leader in your category, your own post. Each author_url goes straight into linkedin_get_profile or leads_get_person. Not for: every comment on a busy post (LinkedIn shows up to 10 to a logged-out reader, so a post with 200 comments returns 10). Reactions, which LinkedIn does not show at all. Many posts at once, use linkedin_search_posts, whose rows carry the same commenters in top_comments. Returns: List. rows[]: one comment each: author (the profile's slug, the part after /in/ or /company/), author_url (on www.linkedin.com), text (cut at 2000 characters). LinkedIn gives no time, likes or replies for a comment, so those are null. meta.cursor is always null: there is no next page. Cost: 1 credit. Cached 6 hours. Example: {"url": "https://www.linkedin.com/posts/aagupta_what-you-need-to-know-ai-agents-activity-7354600338621906944-RvXR"}

Input Schema

NameRequiredDescriptionDefault
urlYesThe full URL of a LinkedIn post.
cursorNoFrom meta.cursor of the previous page.
dry_runNoReturn only meta with the estimate. Costs nothing.
max_creditsNoRefuse with BudgetExceeded if the estimate is higher.

Output Schema

NameRequiredDescriptionDefault
metaYes
rowsNo
errorNo
hintsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / meta / properties / credits_remaining / description
      Previous value: -"The workspace's credits left after this call. null when the call did not check the balance (free tools, cache hits, dry runs, tasks) or the balance has no limit."New value: +"The workspace's credits left after this call. null when the call did not check the balance (free tools, cache hits, dry runs, tasks) or the balance has no limit. Leaves out credits held for calls still running, so it can dip during parallel calls and come back; credits_charged is what this call cost."
  2. Changed1 schema field changed
    • addedOutput schema / properties / meta / properties / feedback_request
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Once per workspace: after the task, ask the user once for feedback and send any answer with submit_feedback.",
      +  "properties": {
      +    "message": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "message"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / properties / meta / properties / credits_notice / description
      Previous value: -"A free workspace is low on credits, at most once a day. Tell the user once."New value: +"The workspace is low on credits, at most once a day. Tell the user once."
  4. Changed17 schema fields changed
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / properties / max_credits / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / provider
      Removed value: -{
      -  "description": "Provider id. Defaults to the server default for the tool.",
      -  "type": "string"
      -}
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / properties / error / additionalProperties
      Added value: +{}
    • removedOutput schema / properties / error / oneOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "BudgetExceeded",
      -        "type": "string"
      -      },
      -      "est_credits": {
      -        "type": "number"
      -      },
      -      "max_credits": {
      -        "type": "number"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "est_credits",
      -      "max_credits",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "billing_url": {
      -        "type": "string"
      -      },
      -      "error": {
      -        "const": "InsufficientCredits",
      -        "type": "string"
      -      },
      -      "est_credits": {
      -        "type": "number"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "upgrade_url": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "est_credits",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "NoData",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "InvalidTarget",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "target": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "target",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "InvalidProvider",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "provider": {
      -        "type": "string"
      -      },
      -      "valid_providers": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "provider",
      -      "valid_providers",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "ProviderUnavailable",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "provider": {
      -        "type": "string"
      -      },
      -      "retry_after_s": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "provider",
      -      "retry_after_s",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "ConcurrencyLimit",
      -        "type": "string"
      -      },
      -      "limit": {
      -        "type": "number"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "retry_after_s": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "limit",
      -      "retry_after_s",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "cap": {
      -        "type": "number"
      -      },
      -      "error": {
      -        "const": "SpendCapReached",
      -        "type": "string"
      -      },
      -      "est_credits": {
      -        "type": "number"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "period": {
      -        "enum": [
      -          "day",
      -          "month"
      -        ],
      -        "type": "string"
      -      },
      -      "resets_at": {
      -        "type": "string"
      -      },
      -      "spent": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "period",
      -      "cap",
      -      "spent",
      -      "est_credits",
      -      "resets_at",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "TaskFailed",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "task_id": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "task_id",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "const": "TaskPending",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "poll_after_s": {
      -        "type": "number"
      -      },
      -      "task_id": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "task_id",
      -      "poll_after_s",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "connect_url": {
      -        "type": "string"
      -      },
      -      "engine": {
      -        "type": "string"
      -      },
      -      "error": {
      -        "const": "NotConnected",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "engine",
      -      "connect_url",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "engine": {
      -        "type": "string"
      -      },
      -      "error": {
      -        "const": "EngineMisconfigured",
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "engine",
      -      "message"
      -    ],
      -    "type": "object"
      -  }
      -]
    • addedOutput schema / properties / error / properties
      Added value: +{
      +  "error": {
      +    "enum": [
      +      "BudgetExceeded",
      +      "InsufficientCredits",
      +      "NoData",
      +      "InvalidTarget",
      +      "InvalidProvider",
      +      "ProviderUnavailable",
      +      "ConcurrencyLimit",
      +      "SpendCapReached",
      +      "TaskFailed",
      +      "TaskPending",
      +      "NotConnected",
      +      "EngineMisconfigured"
      +    ],
      +    "type": "string"
      +  },
      +  "message": {
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / error / required
      Added value: +[
      +  "error",
      +  "message"
      +]
    • addedOutput schema / properties / error / type
      Added value: +"object"
    • removedOutput schema / properties / errors
      Removed value: -{
      -  "description": "Per-input failures of a batch call.",
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "oneOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "BudgetExceeded",
      -                "type": "string"
      -              },
      -              "est_credits": {
      -                "type": "number"
      -              },
      -              "max_credits": {
      -                "type": "number"
      -              },
      -              "message": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "est_credits",
      -              "max_credits",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "billing_url": {
      -                "type": "string"
      -              },
      -              "error": {
      -                "const": "InsufficientCredits",
      -                "type": "string"
      -              },
      -              "est_credits": {
      -                "type": "number"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "upgrade_url": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "est_credits",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "NoData",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "InvalidTarget",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "target": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "target",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "InvalidProvider",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "provider": {
      -                "type": "string"
      -              },
      -              "valid_providers": {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "provider",
      -              "valid_providers",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "ProviderUnavailable",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "provider": {
      -                "type": "string"
      -              },
      -              "retry_after_s": {
      -                "type": "number"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "provider",
      -              "retry_after_s",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "ConcurrencyLimit",
      -                "type": "string"
      -              },
      -              "limit": {
      -                "type": "number"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "retry_after_s": {
      -                "type": "number"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "limit",
      -              "retry_after_s",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "cap": {
      -                "type": "number"
      -              },
      -              "error": {
      -                "const": "SpendCapReached",
      -                "type": "string"
      -              },
      -              "est_credits": {
      -                "type": "number"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "period": {
      -                "enum": [
      -                  "day",
      -                  "month"
      -                ],
      -                "type": "string"
      -              },
      -              "resets_at": {
      -                "type": "string"
      -              },
      -              "spent": {
      -                "type": "number"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "period",
      -              "cap",
      -              "spent",
      -              "est_credits",
      -              "resets_at",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "TaskFailed",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "task_id": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "task_id",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "error": {
      -                "const": "TaskPending",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              },
      -              "poll_after_s": {
      -                "type": "number"
      -              },
      -              "task_id": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "task_id",
      -              "poll_after_s",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "connect_url": {
      -                "type": "string"
      -              },
      -              "engine": {
      -                "type": "string"
      -              },
      -              "error": {
      -                "const": "NotConnected",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "engine",
      -              "connect_url",
      -              "message"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "engine": {
      -                "type": "string"
      -              },
      -              "error": {
      -                "const": "EngineMisconfigured",
      -                "type": "string"
      -              },
      -              "message": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "error",
      -              "engine",
      -              "message"
      -            ],
      -            "type": "object"
      -          }
      -        ]
      -      },
      -      "input": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "input",
      -      "error"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • changedOutput schema / properties / meta / properties / rows_available / anyOf
      Previous value: -[
      -  {
      -    "maximum": 9007199254740991,
      -    "minimum": -9007199254740991,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / meta / properties / rows_returned / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / meta / properties / rows_returned / minimum
      Removed value: --9007199254740991
    • removedOutput schema / properties / rows / items / properties / depth / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / rows / items / properties / depth / minimum
      Removed value: --9007199254740991
    • changedOutput schema / properties / rows / items / properties / likes / anyOf
      Previous value: -[
      -  {
      -    "maximum": 9007199254740991,
      -    "minimum": -9007199254740991,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / rows / items / properties / replies / anyOf
      Previous value: -[
      -  {
      -    "maximum": 9007199254740991,
      -    "minimum": -9007199254740991,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  5. Changed3 schema fields changed
    • addedOutput schema / properties / meta / properties / credits_notice
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A free workspace is low on credits, at most once a day. Tell the user once.",
      +  "properties": {
      +    "message": {
      +      "type": "string"
      +    },
      +    "resets_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "upgrade_url": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "upgrade_url",
      +    "resets_at",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / meta / properties / credits_remaining
      Added value: +{
      +  "description": "The workspace's credits left after this call. null when the call did not check the balance (free tools, cache hits, dry runs, tasks) or the balance has no limit.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / meta / required
      Previous value: -[
      -  "provider",
      -  "credits_charged",
      -  "est_credits",
      -  "cached",
      -  "data_as_of",
      -  "rows_returned",
      -  "rows_available",
      -  "cursor",
      -  "request_id"
      -]New value: +[
      +  "provider",
      +  "credits_charged",
      +  "est_credits",
      +  "cached",
      +  "data_as_of",
      +  "rows_returned",
      +  "rows_available",
      +  "cursor",
      +  "request_id",
      +  "credits_remaining"
      +]
  6. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description still adds substantive behavior: the 10-comment cap for logged-out readers, null time/likes/replies fields, a permanently null cursor (no pagination), 1-credit cost, and a 6-hour cache. These are exactly the traits that determine whether an agent should call it.

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?

Labeled sections (Use when / Not for / Returns / Cost / Example) make it skimmable and front-loaded with purpose. The Returns block largely restates the available output schema, so it is somewhat longer than strictly necessary.

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

Completeness5/5

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

For a 4-parameter read tool with an output schema, the definition covers purpose, alternatives, result shape, pagination limits, cost, and caching. An agent has everything needed to decide and to call it correctly on the first try.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it shows a concrete valid post URL, explains that author_url values feed linkedin_get_profile/leads_get_person, and overrides the schema's implied pagination by stating meta.cursor is always null. It says nothing about dry_run or max_credits, which is the only 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?

Names a specific verb and resource ('The comments LinkedIn shows on one post') and immediately scopes the payload ('each with the commenter's profile URL'). It is clearly distinguishable from linkedin_get_post and linkedin_search_posts, both of which are referenced.

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

Usage Guidelines5/5

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

Explicit 'Use when' with three concrete scenarios (competitor launch, thought leader, own post) and an explicit 'Not for' section naming the alternative for bulk needs ('Many posts at once, use linkedin_search_posts'). Also rules out reactions entirely.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources