mcp-server-linkedin
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-linkedinPublish a LinkedIn post about our new AI feature with an image"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Use Cases
Content Publishing: Draft and publish LinkedIn posts from your AI assistant without switching context.
Media Sharing: Upload images and videos alongside your posts in a single command.
Link Previews: Share articles with auto-generated link preview cards.
Multi-Format Workflow: Compose text-only updates, visual content, or article shares through one unified interface.
Account Management: Authenticate, check your profile, and manage your session without leaving your editor.
Built for developers and content creators who want their AI tools to publish directly to LinkedIn.
Quick Start
Prerequisites
Python 3.10+
LinkedIn App — Follow the step-by-step setup guide or the quick version below:
Create an app at LinkedIn Developer Portal
Products: "Share on LinkedIn" + "Sign In with LinkedIn using OpenID Connect"
OAuth 2.0 scopes:
openid,profile,email,w_member_socialRedirect URL:
http://localhost:3000/callback
Install
uvx mcp-server-linkedinOr with pip:
pip install mcp-server-linkedinRelated MCP server: LinkedIn MCP Server
Configuration
Set these environment variables:
LINKEDIN_CLIENT_ID=your_client_id # From LinkedIn Developer Portal
LINKEDIN_CLIENT_SECRET=your_secret_here # From LinkedIn Developer Portal
LINKEDIN_REDIRECT_URI=http://localhost:3000/callback # Optional, this is the defaultClaude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_secret_here"
}
}
}
}{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_secret_here"
}
}
}
}VS Code + Copilot
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_secret_here"
}
}
}
}Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_secret_here"
}
}
}
}Kiro
Add to .kiro/settings/mcp.json:
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_secret_here"
}
}
}
}Claude Code
claude mcp add linkedin -- uvx mcp-server-linkedinThen set LINKEDIN_CLIENT_ID and LINKEDIN_CLIENT_SECRET in your environment.
Windsurf
Add to your Windsurf MCP configuration:
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_secret_here"
}
}
}
}Running from Source
Replace "command": "uvx", "args": ["mcp-server-linkedin"] with:
{
"command": "uv",
"args": ["--directory", "/path/to/mcp-server-linkedin", "run", "mcp-server-linkedin"]
}Authentication
Start your MCP client (Claude Desktop, Kiro, etc.)
Ask: "Authenticate with LinkedIn"
Browser opens → authorize the app → callback captured automatically
Token saved to
~/.mcp-server-linkedin/token.jsonToken lasts 2 months. Re-run
linkedin_authwhen it expires.
Tools
Tool | Description |
| OAuth 2.0 browser-based authentication |
| Get your name, email, and person URN |
| Remove stored token |
| Publish a text-only post |
| Publish a post with an image |
| Publish a post with a video (up to 200 MB) |
| Publish a post with a link preview |
| Delete a post by ID |
| Get post analytics (requires Community Management API) |
| Get aggregated analytics (requires Community Management API) |
Tool Details
Parameter | Type | Default | Description |
| string | required | Post content (up to ~3000 chars) |
| string |
|
|
Parameter | Type | Default | Description |
| string | required | Post caption |
| string | required | Absolute path to image (JPEG, PNG, GIF) |
| string |
|
|
Parameter | Type | Default | Description |
| string | required | Post caption |
| string | required | Absolute path to video (MP4, max 200 MB) |
| string |
|
|
Parameter | Type | Default | Description |
| string | required | Post commentary |
| string | required | Article URL (generates link preview) |
| string |
| Optional link preview title |
| string |
| Optional link preview description |
| string |
|
|
Parameter | Type | Default | Description |
| string | required | Post URN (e.g., |
Architecture
src/mcp_server_linkedin/
├── config.py # Constants, API URLs, settings dataclass
├── exceptions.py # Typed exception hierarchy
├── server.py # FastMCP entrypoint + tool registration
├── models/ # Frozen dataclass API response models
├── services/ # Async API client with connection pooling
├── tools/ # MCP tool implementations (validate → delegate → format)
│ ├── auth.py # OAuth flow, profile, logout
│ ├── posting.py # Text, image, video, article, delete
│ └── analytics.py # Stubbed (pending API access)
└── utils/ # Token persistenceRate Limits
Limit | Value |
API requests per member per day | 150 |
Token duration | 2 months |
Max video file size | 200 MB |
The server relays LinkedIn's rate limit errors clearly but does not enforce limits internally.
Security
Tokens stored locally at
~/.mcp-server-linkedin/token.jsonNo credentials in code — all secrets via environment variables
Official API only — uses
w_member_socialscopeLocal OAuth callback — authorization code never leaves your machine
No data collection — this server sends nothing except LinkedIn API calls
Development
git clone https://github.com/Huzaifa-ali/mcp-server-linkedin.git
cd mcp-server-linkedin
uv sync --all-extras
pre-commit installuv run mcp-server-linkedin # Run the server
uv run ruff check src/ # Lint
uv run ruff format src/ # Format
uv run mypy src/ # Type check
uv run pytest # TestTest with MCP Inspector:
npx @modelcontextprotocol/inspector uv run mcp-server-linkedinContributing
See CONTRIBUTING.md for guidelines. In short:
Fork the repo and create a feature branch
Make your changes with type hints and docstrings
Run
pre-commit run --all-files(must pass)Open a pull request
License
MIT — see LICENSE.
Available Tools
10 toolslinkedin_authA
Authenticate with LinkedIn using OAuth 2.0. Opens a browser window for the user to log in and authorize. Must be called BEFORE any other LinkedIn tool if the user is not yet authenticated. Only needs to be run once — the token is saved and lasts 2 months.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses opening a browser window, saving the token, and its 2-month lifespan, giving complete behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each essential: authentication method, prerequisite, and token lifetime. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and presence of output schema, description covers all essential aspects: OAuth mechanism, ordering constraint, persistence, and expiration. Complete for an auth tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so no additional meaning needed beyond schema. Baseline 4 for 0-param tools; description adds value by explaining behavior instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool authenticates with LinkedIn via OAuth 2.0, a specific verb-resource pair. It distinguishes from sibling tools (profile, posts, stats) that require prior authentication.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Must be called BEFORE any other LinkedIn tool if the user is not yet authenticated' and notes it only needs to be run once, providing clear when-to-use and persistence guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_delete_postA
Delete an existing LinkedIn post. Use when the user wants to remove a post they previously published. Requires: the post URN/ID (e.g., urn:li:ugcPost:123456 or urn:li:share:123456). This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It explicitly states that the action is 'irreversible', which is critical for a delete operation. It also specifies the required ID format. This adds value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the action, then usage, then requirement. Every sentence provides essential information with no redundancy or fluff. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one required parameter and an output schema present, the description covers purpose, usage, parameter format, and irreversibility. It is sufficiently complete for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining that 'post_id' expects a LinkedIn post URN/ID and provides concrete examples (e.g., urn:li:ugcPost:123456). This makes the parameter usage very clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'existing LinkedIn post', with explicit usage context ('remove a post they previously published'). The purpose is unambiguous and distinguishes it from sibling tools like posting or stats, which are clearly different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when the user wants to remove a post they previously published', providing clear guidance on when to invoke this tool. It does not mention when not to use or alternatives, but the use case is specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_all_statsA
Get aggregated analytics across ALL LinkedIn posts (total impressions, clicks, likes, comments, shares). NOTE: Currently requires Community Management API access (r_member_postAnalytics scope) which must be applied for separately. Returns instructions on how to gain access if not available.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | impressions | |
| end_date | No | ||
| start_date | No | ||
| aggregation | No | daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds value by disclosing the access requirement and the tool's behavior when access is missing (returns instructions). It does not cover other traits like rate limits or data freshness, but the access context is critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second covers prerequisite and fallback behavior. No unnecessary words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description omits parameter details entirely. For a tool with 0% parameter documentation, the description is incomplete for an agent to invoke correctly without additional lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the four parameters (metric, start_date, end_date, aggregation). The purpose mentions metrics but not how to use the parameters. The description adds no semantic value beyond the schema's basic titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates analytics across ALL LinkedIn posts, listing specific metrics (impressions, clicks, likes, comments, shares). This distinguishes it from linkedin_get_post_stats, which is for individual posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes the required Community Management API access and scope, and describes behavior when access is unavailable (returns instructions). This guides the agent on prerequisites and fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_post_statsB
Get analytics (impressions, clicks, likes, comments, shares) for a specific LinkedIn post. NOTE: Currently requires Community Management API access (r_member_postAnalytics scope) which must be applied for separately at developer.linkedin.com. Returns instructions on how to gain access if not available.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | impressions | |
| post_id | Yes | ||
| end_date | No | ||
| start_date | No | ||
| aggregation | No | daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses access requirements and fallback returns, but lacks mention of read-only nature, rate limits, or side effects. Some useful context but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a parenthetical note, front-loaded with purpose. No wasted words; appropriate length for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, 1 required, and existing output schema, the description covers the tool's core purpose and access constraints but omits details on date range or aggregation semantics, leaving some context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description does not explain any of the parameters (metric, start_date, end_date, aggregation) beyond implicitly indicating post_id identifies a post. Fails to add meaning to the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Get' and the resource 'analytics (impressions, clicks, likes, comments, shares) for a specific LinkedIn post'. Distinguishes from sibling 'linkedin_get_all_stats' by focusing on a single post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides prerequisite access scope and fallback behavior (returns instructions if not available), but does not explicitly guide when to use this tool vs. alternatives like linkedin_get_all_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_profileA
Get the currently authenticated LinkedIn user's profile: name, email, person URN, and profile picture URL. Use this to confirm who is logged in or to retrieve the user's identity. Requires prior authentication.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly identifies the tool as read-only (get profile) and states the authentication requirement. It does not detail failure modes or side effects, but given the simple nature of the tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, no wasted words. The description is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description covers purpose, usage guidelines, and behavioral context (authentication requirement). No important gaps remain, making it fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the description does not need to add param-level detail. It mentions the returned fields (name, email, person URN, profile picture URL), which adds value beyond the empty schema. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the authenticated user's profile with specific fields (name, email, person URN, profile picture URL). This verb-resource pairing is distinct from sibling tools like posting or auth, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using this tool to confirm who is logged in or retrieve identity, and notes the prerequisite of prior authentication. This provides clear context for when to use it and distinguishes it from other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_logoutA
Log out of LinkedIn by deleting the stored OAuth token. Use when the user wants to switch accounts or revoke access. After logout, linkedin_auth must be called again before using any other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses behavior: it deletes the OAuth token and invalidates the session, requiring re-authentication. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The critical information (action, use case, consequence) is front-loaded and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and an output schema, the description is complete. It addresses usage, effect, and post-requisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters and schema coverage is 100% (empty schema). The description adds meaning beyond the schema by explaining the tool's effect and usage context, exceeding the baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Log out of LinkedIn by deleting the stored OAuth token') and the resource ('LinkedIn'). It distinguishes from sibling tools like linkedin_auth (login) and other LinkedIn tools that require authentication.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when the user wants to switch accounts or revoke access') and what happens after logout ('linkedin_auth must be called again'), providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_post_articleA
Publish a LinkedIn post with a link/article preview card. Use when the user wants to share a URL with an auto-generated preview (title, description, thumbnail). Best for sharing blog posts, news articles, or web pages. Requires: text commentary AND a URL. Optional: custom title, description, visibility (PUBLIC or CONNECTIONS).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| text | Yes | ||
| title | No | ||
| visibility | No | PUBLIC | |
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure it. It mentions required parameters (text commentary and URL) and optional ones (title, description, visibility), but does not disclose side effects, authentication needs, rate limits, or what happens exactly when the post is published. This leaves gaps in behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core action, and every sentence adds value. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (5 parameters, 2 required, output schema exists), the description covers purpose, usage context, and parameter details adequately. It lacks explanation of errors, rate limits, or prerequisite authentication, but the presence of an output schema reduces the need for return value explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description compensates well by explaining the meaning of each parameter (text commentary, URL), marking required vs optional, and specifying allowed values for visibility (PUBLIC or CONNECTIONS). It adds context beyond the field names but could include constraints like character limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Publish' and the resource 'LinkedIn post with a link/article preview card'. It distinguishes from siblings like linkedin_post_text by specifying the use case for sharing URLs with auto-generated previews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: 'Use when the user wants to share a URL with an auto-generated preview' and 'Best for sharing blog posts, news articles, or web pages'. However, it does not explicitly state when not to use it or name alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_post_imageA
Publish a LinkedIn post with an attached image. Use when the user wants to share a photo, infographic, screenshot, or any image file alongside text. Requires: text caption AND absolute file path to an image (JPEG, PNG, or GIF). Optional: visibility (PUBLIC or CONNECTIONS).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| image_path | Yes | ||
| visibility | No | PUBLIC |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses required inputs (text, absolute file path, image formats) and optional visibility, but does not mention side effects, authentication needs, or rate limits. Basic behavioral traits are covered, but not in depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the main purpose, and every sentence adds necessary information. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description need not detail return values. It covers the core use case, required parameters, and optional visibility. It could mention authentication (via linkedin_auth), but overall it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It adds meaning: 'text' is a caption, 'image_path' is an absolute file path with allowed formats, and 'visibility' has default 'PUBLIC' with enum values. This fully clarifies the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Publish' and the resource 'LinkedIn post with an attached image', and it distinguishes this tool from siblings (post_text, post_video, post_article) by specifying image attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use: 'Use when the user wants to share a photo, infographic, screenshot, or any image file alongside text.' It does not explicitly list exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_post_textA
Publish a text-only post to LinkedIn. Use when the user wants to share a written update, thought, or announcement WITHOUT any image, video, or link preview. Requires: text content. Optional: visibility (PUBLIC or CONNECTIONS).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| visibility | No | PUBLIC |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool publishes a post, but does not mention side effects (e.g., posting immediately, character limits, content policy) or return value. With output schema present, some transparency is expected but not delivered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. The purpose is front-loaded, and optional details follow. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and an output schema, the description is mostly complete. However, it does not mention authentication requirements, though sibling tools include linkedin_auth, implying auth is separate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It explains text as content and visibility options as 'PUBLIC or CONNECTIONS', but adds no further details like max length or formatting. This is minimally adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Publish a text-only post to LinkedIn' and distinguishes from sibling tools by specifying 'WITHOUT any image, video, or link preview'. The verb 'Publish' and resource 'text-only post' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when the user wants to share a written update... WITHOUT any image, video, or link preview', providing clear when-to-use and when-not-to-use. Also mentions required text and optional visibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_post_videoA
Publish a LinkedIn post with an attached video. Use when the user wants to share a video file (MP4, max 200 MB) alongside text. Requires: text caption AND absolute file path to a video file. Optional: visibility (PUBLIC or CONNECTIONS).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| video_path | Yes | ||
| visibility | No | PUBLIC |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses requirements (text, absolute path) and optional visibility but omits behavioral traits like return value, error behavior, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, then usage context, then parameter details. No extraneous information; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 parameters, no enums, no annotations, but with output schema), the description covers key aspects: required params, constraints, and optional. It lacks mention of return value or post URL, but output schema may suffice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description adds meaning by explaining that video_path is an 'absolute file path to a video file' and visibility defaults to PUBLIC. This compensates for the schema's lack of informative titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Publish a LinkedIn post with an attached video,' providing a specific verb and resource. It distinguishes from siblings like linkedin_post_text and linkedin_post_image by focusing on video attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes 'Use when the user wants to share a video file (MP4, max 200 MB) alongside text,' implying appropriate usage. However, it does not explicitly state when not to use or mention alternatives, though sibling tools provide context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v0.2.0- First observed
linkedin_auth - First observed
linkedin_delete_post - First observed
linkedin_get_all_stats - First observed
linkedin_get_post_stats - First observed
linkedin_get_profile - First observed
linkedin_logout - First observed
linkedin_post_article - First observed
linkedin_post_image - First observed
linkedin_post_text - First observed
linkedin_post_video
TDQS
Each tool targets a distinct action: authentication, profile retrieval, logout, various post types (text, image, video, article), deletion, and post stats. No overlapping functionality.
All tools follow a consistent 'linkedin_verb_noun' pattern in snake_case (e.g., linkedin_post_text, linkedin_get_profile). Minor exception: linkedin_auth omits a noun but is still clear.
With 10 tools, the set covers authentication, profile, posting (four types), deletion, and two levels of stats. Each tool serves a clear purpose, and no tool seems redundant or out of place.
Covers core posting and basic profile/stats, but notable gaps exist: no ability to list or edit posts, no comment operations, and stats tools require special API access not guaranteed. For a content-focused toolset, updates and retrieval would be expected.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Full LinkedIn access for AI agents: leads, messaging, and campaigns with safe limits built in.
Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.
Write LinkedIn posts in your voice: ideas, drafts, scheduling, analytics from your personal AI.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with LinkedIn for posting, commenting, liking, and managing connections via OAuth2 authentication.29MIT
- AlicenseBqualityCmaintenanceEnables AI agents to manage LinkedIn profiles, posts, connections, skills, education, and certifications through the LinkedIn API.1817664MIT
- AlicenseBqualityAmaintenanceEnables AI agents with read/write access to LinkedIn API, including profile, posts, media, organizations, comments, reactions, and analytics.2011MIT
- AlicenseAqualityAmaintenanceEnables AI agents to publish posts, images, comments, and reactions to LinkedIn as the authenticated user, with built-in safety features like daily budgets and deduplication.929Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Huzaifa-ali/mcp-server-linkedin'
If you have feedback or need assistance with the MCP directory API, please join our Discord server