LinkedIn Custom MCP Server
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., "@LinkedIn Custom MCP ServerSearch for Senior Python Developer jobs in San Francisco"
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.
LinkedIn MCP Server
A powerful Model Context Protocol (MCP) server that enables AI agents like Claude to interact seamlessly with LinkedIn's professional network. Built with FastMCP for high performance and reliability.
What is This?
This MCP server bridges the gap between AI assistants and LinkedIn, allowing them to:
Create and manage LinkedIn posts with text and images
Comment on posts and engage with content
Access profile information
Search for companies, jobs, and people
Automate LinkedIn interactions through natural language
Perfect for professionals who want to leverage AI to manage their LinkedIn presence efficiently.
Related MCP server: LinkedIn MCP Server
Features
Core Capabilities
Secure Authentication - OAuth 2.0 flow with access token management
Content Creation - Publish text posts and image posts
Content Management - Update and delete posts
Engagement - Comment on posts and manage comments
Profile Access - Retrieve authenticated user profile information
Company Intelligence - Search and view company profiles
Job Discovery - Search job postings and view details
People Search - Find professionals on LinkedIn
Built With
FastMCP - Modern Python MCP framework
httpx - Async HTTP client for API calls
Pydantic - Data validation and settings management
OAuth 2.0 - Industry-standard authentication
Installation
Option 1: Using uvx (Recommended)
The fastest way to get started:
uvx linkedin-mcp-serverOption 2: Using pip
Install from PyPI:
pip install linkedin-mcp-serverOption 3: From Source
For development or customization:
git clone https://github.com/SARAMALI15792/LinkedIn_mcp_custom_server.git
cd LinkedIn_mcp_custom_server
pip install -e .Quick Start Guide
Step 1: Create LinkedIn App
Click "Create app"
Fill in required information:
App name: Choose a descriptive name
LinkedIn Page: Associate with your page or create one
App logo: Upload a logo (optional but recommended)
Request access to these products:
Sign In with LinkedIn using OpenID Connect (instant approval)
Share on LinkedIn (instant approval)
In the "Auth" tab:
Add Redirect URL:
http://localhost:8000Copy your Client ID
Copy your Client Secret
Step 2: Configure Environment
Create a .env file in your working directory:
LINKEDIN_CLIENT_ID=your_client_id_here
LINKEDIN_CLIENT_SECRET=your_client_secret_here
LINKEDIN_REDIRECT_URI=http://localhost:8000Security Note: Never commit the .env file to version control. It's already in .gitignore.
Step 3: Configure Claude Desktop
Edit your Claude Desktop configuration file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
Add the LinkedIn MCP server:
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["linkedin-mcp-server"]
}
}
}If installed via pip:
{
"mcpServers": {
"linkedin": {
"command": "linkedin-mcp-server"
}
}
}For local development:
{
"mcpServers": {
"linkedin": {
"command": "python",
"args": ["-m", "linkedin_mcp_server"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret",
"LINKEDIN_REDIRECT_URI": "http://localhost:8000"
}
}
}
}Step 4: Authenticate with LinkedIn
Restart Claude Desktop
In Claude, type: "Generate LinkedIn login URL"
Copy and open the URL in your browser
Sign in to LinkedIn and authorize the application
You'll be redirected to
http://localhost:8000/?code=...Copy the
codeparameter value from the URLIn Claude, type: "Exchange this code: [paste the code]"
Done! You're now authenticated.
Your access token is automatically saved to .env and will be used for all future requests.
Usage Examples
Authentication
User: "Generate LinkedIn login URL"
Claude: [Provides OAuth URL with instructions]
User: "Exchange this code: AQTvqXXXXXXXXXXX"
Claude: "Success! Access Token saved. Expires in 5183999 seconds."Creating Posts
Text Post:
User: "Post to LinkedIn: Excited to announce the launch of our new AI-powered LinkedIn MCP server! Check it out on GitHub."
Claude: [Creates post and returns post URN]Post with Image:
User: "Post this image to LinkedIn with caption 'Team celebration': C:/Users/photos/team.jpg"
Claude: [Uploads image and creates post with caption]Managing Content
Update a Post:
User: "Update post urn:li:share:7289123456789 to say: Updated announcement..."
Claude: [Deletes old post and creates new one with updated text]Delete a Post:
User: "Delete my post urn:li:share:7289123456789"
Claude: [Deletes the post permanently]Engagement
Comment on Posts:
User: "Comment on post urn:li:share:7289123456789: Great insights, thanks for sharing!"
Claude: [Posts comment and returns comment URN]View Comments:
User: "Show comments on post urn:li:share:7289123456789"
Claude: [Retrieves and displays all comments]Profile Information
User: "What's my LinkedIn email address?"
Claude: [Retrieves profile and shows email]
User: "Show me my LinkedIn profile"
Claude: [Displays profile information: name, email, picture URL, etc.]Company Research
User: "Search for companies: Microsoft"
Claude: [Returns list of matching companies]
User: "Get details for company urn:li:organization:1035"
Claude: [Shows company profile information]Job Search
User: "Find remote Python developer jobs"
Claude: [Searches and displays matching job postings]
User: "Search for Machine Learning Engineer positions in San Francisco"
Claude: [Returns relevant job listings]
User: "Get details for job urn:li:job:123456789"
Claude: [Shows detailed job information]People Search
User: "Search for AI researchers at Stanford"
Claude: [Returns matching professionals]Available Tools
Tool Name | Description | Read-Only | Destructive |
| Generate OAuth 2.0 authorization URL | Yes | No |
| Exchange auth code for access token | No | No |
| Get authenticated user's profile | Yes | No |
| Get member profile by URN | Yes | No |
| Create text post | No | No |
| Create post with image | No | No |
| Update existing post (via delete + create) | No | Yes |
| Delete post permanently | No | Yes |
| List recent posts | Yes | No |
| Comment on content | No | No |
| Get comments on post | Yes | No |
| Delete comment permanently | No | Yes |
| Get company details by URN | Yes | No |
| Search for companies | Yes | No |
| Search job postings | Yes | No |
| Get job details by URN | Yes | No |
| Search for people | Yes | No |
Understanding LinkedIn URNs
LinkedIn uses URNs (Uniform Resource Names) to identify resources:
Person:
urn:li:person:AbC123XyZPost/Share:
urn:li:share:7289123456789Comment:
urn:li:comment:(ugcPost:7289123456789,7289987654321)Organization:
urn:li:organization:1035Job:
urn:li:job:123456789
When Claude returns a URN, you can use it to reference that resource in other commands.
API Permissions and Limitations
Available Permissions
This server requests these OAuth scopes:
openid- OpenID Connect authenticationprofile- Access to profile informationemail- Access to email addressw_member_social- Create posts and comments
Known Limitations
Some LinkedIn API features require additional permissions that are restricted to approved partners:
Restricted Read Operations:
r_member_social- Read user's posts (rarely granted to third-party apps)Marketing Developer Platform - Advanced company/people search
Talent Solutions - Advanced job search features
What This Means:
Creating posts: Works perfectly
Deleting posts: Works perfectly
Reading your own posts: May not work (requires restricted permission)
Advanced search: May require approval for Marketing/Talent APIs
Why? LinkedIn restricts these APIs to protect user privacy and control third-party access to their platform.
Project Structure
linkedin-mcp-server/
├── linkedin_mcp_server/ # Main package
│ ├── __init__.py # Package initialization
│ ├── __main__.py # CLI entry point
│ ├── server.py # MCP server with 18 tool definitions
│ ├── config.py # Configuration with pydantic-settings
│ ├── utils.py # Shared HTTP client utilities
│ └── tools/ # Tool implementations
│ ├── auth.py # OAuth 2.0 authentication flow
│ ├── profile.py # Profile retrieval operations
│ ├── post.py # Post and comment operations
│ ├── company.py # Company search and profiles
│ ├── job.py # Job search operations
│ └── search.py # People search functionality
├── pyproject.toml # Package metadata and dependencies
├── requirements.txt # Pinned dependencies
├── README.md # This file
├── claude.md # Claude integration guide
├── LICENSE # MIT License
└── get_profile.py # Example standalone scriptDevelopment
Setting Up Development Environment
# Clone repository
git clone https://github.com/SARAMALI15792/LinkedIn_mcp_custom_server.git
cd LinkedIn_mcp_custom_server
# Install with dev dependencies
pip install -e ".[dev]"Running Tests
pytest tests/Code Quality
# Format code
black linkedin_mcp_server/
# Lint
ruff check linkedin_mcp_server/
# Type checking
mypy linkedin_mcp_server/Running Locally
# Using module syntax
python -m linkedin_mcp_server
# Using installed command
linkedin-mcp-serverTroubleshooting
Authentication Issues
Problem: "Error: LINKEDIN_CLIENT_ID not configured"
Solution: Create .env file with your LinkedIn app credentials
Problem: "Unauthorized (401)" errors Solution: Your access token expired. Re-authenticate using the OAuth flow
Problem: "Error exchanging code: invalid code" Solution: Authorization codes expire quickly. Generate a new OAuth URL and try again
API Errors
Problem: "Forbidden (403)" errors Solution: Your LinkedIn app may lack required permissions. Check your app's products in the Developer Portal
Problem: "r_member_social permission required" Solution: This permission is restricted. LinkedIn rarely grants it to third-party apps. Focus on write operations instead
Problem: Can't search companies/jobs/people Solution: These APIs may require Marketing/Talent Solutions products which need LinkedIn approval
Connection Issues
Problem: MCP server not connecting in Claude Desktop Solution:
Verify
claude_desktop_config.jsonsyntax is valid JSONCheck that the command path is correct
Restart Claude Desktop
Check Claude Desktop logs for error messages
Problem: ".env file not found"
Solution: Create .env file in the same directory where Claude Desktop runs the server, or specify environment variables in the config
Security Best Practices
Never commit credentials -
.envis in.gitignorefor a reasonRotate tokens regularly - Re-authenticate periodically for security
Use HTTPS in production - Update redirect URI to HTTPS for production apps
Minimum permissions - Only request scopes you actually need
Review app access - Regularly check LinkedIn's "Apps" section in settings
Contributing
Contributions are welcome! Here's how:
Fork the repository
Create a feature branch:
git checkout -b feature/amazing-featureMake your changes
Run tests:
pytest tests/Format code:
black linkedin_mcp_server/Commit:
git commit -m 'Add amazing feature'Push:
git push origin feature/amazing-featureOpen a Pull Request
Contribution Guidelines
Follow existing code style (Black formatter, 100 char line length)
Add tests for new features
Update documentation as needed
Keep commits focused and atomic
Write clear commit messages
Roadmap
Future enhancements being considered:
Token refresh flow implementation
Webhook support for real-time notifications
Enhanced error handling and retry logic
Pagination support for search results
Bulk operations for efficiency
Analytics and insights (if API access granted)
Connection management features
Message sending (if Messaging API access granted)
FAQ
Q: Why can't I read my own posts?
A: The r_member_social permission required to read posts is restricted by LinkedIn. Most third-party apps cannot access this feature.
Q: How long do to access tokens last? A: LinkedIn controls token expiration. Typically tokens last for 60 days, but this can vary. You'll need to re-authenticate when tokens expire.
Q: Can I use this for multiple LinkedIn accounts?
A: Currently, the server is designed for single-user authentication. Each .env file holds one access token.
Q: Is this officially supported by LinkedIn? A: No, this is a community project. It uses LinkedIn's public APIs but is not officially endorsed by LinkedIn.
Q: Can I use this commercially? A: Yes, the MIT license allows commercial use. However, check LinkedIn's terms of service and API usage policies.
Q: Why do some searches return empty results? A: Search APIs may require additional LinkedIn products (Marketing/Talent) that need approval. Also, API access varies by account type.
Support
Report bugs: GitHub Issues
Documentation: GitHub README
Integration Guide: claude.md
Discussions: GitHub Discussions
Resources
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
Built with:
FastMCP - For the excellent MCP framework
Model Context Protocol - For enabling AI-agent integrations
LinkedIn API - For providing professional networking capabilities
Claude - For inspiring and testing this integration
Author
SARAM ALI
Email: saramali15792@gmail.com
GitHub: @SARAMALI15792
Project: LinkedIn MCP Custom Server
Built with care for the AI and LinkedIn communities | Report Issues | Contribute | Star on GitHub
Available Tools
17 toolslinkedin_create_commentCreate CommentB
Create a comment on a LinkedIn share, article, or video. Args: object_urn: The URN of the content to comment on (e.g., 'urn:li:share:123'). text: The text of the comment.
| Name | Required | Description | Default |
|---|---|---|---|
| object_urn | Yes | ||
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries full burden. It states 'Create a comment' implying a write/mutation operation, but lacks behavioral details such as permissions required, rate limits, whether comments are editable/deletable, or what happens on success/failure. This is inadequate for a mutation tool with no annotation coverage.
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 front-loaded with the core purpose in the first sentence, followed by a clear 'Args:' section listing parameters. It's efficient with minimal waste, though the structure could be slightly improved by integrating parameter details more seamlessly.
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 has an output schema (which handles return values), 2 parameters with description coverage, and no complex annotations, the description is moderately complete. However, as a mutation tool, it lacks crucial behavioral context (e.g., side effects, error handling), making it incomplete for safe agent use.
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 compensates by explaining both parameters: 'object_urn' as 'The URN of the content to comment on' with an example, and 'text' as 'The text of the comment.' This adds meaningful semantics beyond the bare schema, though it could elaborate on URN formats or text constraints.
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 ('Create a comment') and specifies the target resources ('on a LinkedIn share, article, or video'), which distinguishes it from sibling tools like linkedin_create_post or linkedin_delete_comment. However, it doesn't explicitly differentiate from all siblings (e.g., it could mention it's for commenting vs. posting original content).
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), exclusions, or compare it to related tools like linkedin_get_post_comments or linkedin_update_post, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_create_image_postCreate Image PostB
Create a post with an image. Args: text: Post caption. image_source: Local file path or public URL of the image. visibility: 'PUBLIC' or 'CONNECTIONS'.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| image_source | 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?
Annotations only provide a title, so the description carries full burden. It states this is a creation tool, implying mutation, but doesn't disclose behavioral traits like authentication needs, rate limits, or what happens on success/failure. The description adds minimal context beyond the basic action.
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 front-loaded with the core purpose ('Create a post with an image'), followed by a concise parameter list. Every sentence earns its place, with no wasted words, making it easy to scan and understand quickly.
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 complexity (mutation with 3 parameters), annotations are minimal (only title), and an output schema exists (so return values needn't be explained), the description is moderately complete. It covers the action and parameters but lacks behavioral context like error handling or side effects, leaving gaps for a mutation 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?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining each parameter: 'text' as the post caption, 'image_source' as a local file path or public URL, and 'visibility' with allowed values ('PUBLIC' or 'CONNECTIONS'). This clarifies semantics beyond the bare schema, though it doesn't cover all details like format constraints.
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 ('Create') and resource ('post with an image'), distinguishing it from sibling tools like 'linkedin_create_post' (likely text-only) and 'linkedin_update_post'. However, it doesn't explicitly mention LinkedIn as the platform, though this is implied by the tool name and sibling context.
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?
No guidance is provided on when to use this tool versus alternatives like 'linkedin_create_post' (presumably for text-only posts) or 'linkedin_update_post'. The description lacks context about prerequisites, such as authentication or image requirements, and doesn't mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_create_postCreate Feed PostA
Create a new text-based update on the user LinkedIn feed. Args: text: The content of the post. 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?
Annotations only provide a title, so the description carries the full burden of behavioral disclosure. It indicates this is a creation tool (implying mutation) and specifies visibility options, but does not cover other behavioral traits like authentication needs, rate limits, or what happens on success/failure. The description adds some context (visibility settings) but is incomplete for a mutation tool with no annotations.
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 front-loaded with the core purpose in the first sentence, followed by parameter details. It is appropriately sized with no redundant information, though the parameter explanations could be slightly more integrated into the flow rather than listed separately.
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 has an output schema (which handles return values), the description focuses on input semantics and purpose. It covers the basic action and parameters adequately for a creation tool, but lacks details on behavioral aspects like error handling or side effects, which would be beneficial given the mutation nature and sparse annotations.
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 the description must compensate. It adds meaningful semantics by explaining 'text' as 'The content of the post' and 'visibility' with enum values 'PUBLIC' or 'CONNECTIONS', which clarifies beyond the schema's basic types. However, it does not detail constraints like text length or default behavior for visibility, leaving some gaps.
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 specific action ('Create a new text-based update') and resource ('on the user LinkedIn feed'), distinguishing it from siblings like linkedin_create_image_post (which handles images) and linkedin_update_post (which modifies existing posts). The verb 'create' and resource 'feed post' are precise and 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?
The description implies usage for text-based posts on LinkedIn feeds but does not explicitly state when to use this tool versus alternatives like linkedin_create_image_post or linkedin_update_post. It provides basic context (text-based updates) but lacks explicit guidance on exclusions or prerequisites, such as when image posts are more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_delete_commentDelete CommentC
Delete a specific comment. Args: comment_urn: The URN of the comment to delete. object_urn: The URN of the parent post/object.
| Name | Required | Description | Default |
|---|---|---|---|
| comment_urn | Yes | ||
| object_urn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries full burden. It states 'Delete' which implies a destructive mutation, but doesn't disclose behavioral traits like irreversibility, permission requirements, rate limits, or what happens on success/failure. The output schema exists but isn't referenced.
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 front-loaded with the core purpose, followed by parameter details in a structured 'Args:' section. It's appropriately sized with no redundant sentences, though the parameter explanations could be more informative.
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 a destructive tool with 2 parameters, 0% schema coverage, and an output schema (which reduces need to describe returns), the description is minimally adequate. It covers purpose and parameters but lacks behavioral context and usage guidelines, leaving gaps for safe 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%, so the description must compensate. It lists both parameters with brief explanations ('URN of the comment to delete', 'URN of the parent post/object'), adding meaning beyond the bare schema. However, it doesn't clarify URN format, examples, or relationships between 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 ('Delete') and resource ('a specific comment'), making the purpose unambiguous. It distinguishes from siblings like 'linkedin_delete_post' by specifying the comment resource, though it doesn't explicitly contrast them in the description text.
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 provides no guidance on when to use this tool versus alternatives like 'linkedin_delete_post' or 'linkedin_update_post'. It lacks context about prerequisites (e.g., ownership/permissions), error conditions, or typical scenarios for deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_delete_postDelete PostA
Delete a LinkedIn post by its URN (e.g., 'urn:li:share:123').
| Name | Required | Description | Default |
|---|---|---|---|
| post_urn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the full burden of behavioral disclosure. It mentions deletion but fails to describe critical traits like whether this action is irreversible, requires specific permissions, has rate limits, or what the output schema contains. For a destructive operation with minimal annotations, this leaves significant gaps.
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 a single, efficient sentence that front-loads the core action and includes a helpful example. There is no wasted verbiage, making it easy to parse quickly while conveying necessary 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's destructive nature, lack of annotations, and presence of an output schema, the description is minimally adequate but incomplete. It covers the basic purpose and parameter semantics but misses behavioral context like irreversibility or permission requirements. The output schema existence means return values need not be explained, but safety and operational details are lacking.
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 0% schema description coverage and one parameter, the description adds essential meaning by explaining that 'post_urn' is the identifier for the LinkedIn post to delete and provides an example format ('urn:li:share:123'). This compensates well for the lack of schema documentation, though it could specify more about URN sourcing or validation.
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 specific action ('Delete') and target resource ('a LinkedIn post'), distinguishing it from sibling tools like 'linkedin_update_post' or 'linkedin_delete_comment' by specifying the exact resource type (post) and mechanism (by its URN). It provides a concrete example ('urn:li:share:123') to illustrate the required format.
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 offers no guidance on when to use this tool versus alternatives, such as 'linkedin_update_post' for modifying posts instead of deleting them, or prerequisites like needing an existing post URN. It simply states what the tool does without contextual usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_exchange_codeExchange Auth CodeB
Exchange the browser-provided authorization code for a persistent access token.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the burden of behavioral disclosure. It indicates this is a mutation operation (exchanging codes for tokens) and implies persistence, but doesn't detail authentication needs, rate limits, error handling, or what 'persistent' entails. With no annotations to contradict, it adds some context but lacks depth for a critical auth tool.
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 a single, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded with the core action and resources, making it highly concise and well-structured for quick comprehension.
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 complexity as an OAuth exchange with 1 parameter, 0% schema coverage, and an output schema (which handles return values), the description is minimally adequate. It covers the basic purpose but lacks details on authentication flow, error cases, or integration with siblings like 'linkedin_get_oauth_url', making it incomplete for full contextual understanding.
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 the description must compensate. It mentions 'browser-provided authorization code' for the 'code' parameter, adding semantic meaning beyond the schema's type definition. However, it doesn't explain the code's format, source, or validation rules, leaving gaps in parameter understanding despite the low coverage baseline.
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 ('Exchange') and the resources involved ('authorization code' for 'access token'), making the purpose specific and understandable. However, it doesn't explicitly differentiate this from sibling tools like 'linkedin_get_oauth_url', which might be related in the OAuth flow, leaving room for slight ambiguity in sibling context.
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 provides no guidance on when to use this tool versus alternatives, such as how it fits into the OAuth flow with 'linkedin_get_oauth_url' or other auth-related operations. It lacks explicit instructions on prerequisites, timing, or exclusions, offering only a basic functional statement without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_company_profileGet Company ProfileA
Fetch a company's profile information by its URN (e.g., 'urn:li:organization:123').
| Name | Required | Description | Default |
|---|---|---|---|
| company_urn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the full burden. It discloses the read-only nature through 'Fetch,' but lacks details on behavioral traits like rate limits, authentication needs, or error handling. No contradiction with annotations exists, but the description adds minimal value beyond the implied read operation.
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 a single, efficient sentence that front-loads the key action and resource, with no wasted words. It directly addresses the tool's function and parameter usage, making it easy to parse and understand quickly.
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 low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers the core purpose and parameter usage, but could improve by adding context on authentication or error cases, though annotations are minimal.
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 0% schema description coverage and only 1 parameter, the description compensates by explaining the parameter's purpose ('company's profile information by its URN') and providing an example format ('urn:li:organization:123'). This adds meaningful semantics beyond the bare schema, though it could specify URN constraints or validation rules.
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 specific action ('Fetch') and resource ('company's profile information'), and distinguishes it from sibling tools like 'linkedin_search_companies' by focusing on retrieval by URN rather than search. It provides a concrete example of the URN format, 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?
The description implies usage context by specifying retrieval by URN, which helps differentiate it from search-based siblings (e.g., 'linkedin_search_companies'). However, it does not explicitly state when to use alternatives or any exclusions, such as whether it works for all company types or requires specific permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_job_detailsGet Job DetailsB
Fetch details for a specific job posting by its URN.
| Name | Required | Description | Default |
|---|---|---|---|
| job_urn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the burden. It implies a read-only operation ('Fetch'), but doesn't disclose behavioral traits like authentication requirements, rate limits, error handling, or what details are returned. No contradiction with annotations exists, but minimal context is added.
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 a single, efficient sentence that front-loads the core purpose with no wasted words. It directly states what the tool does without unnecessary elaboration, making it easy to parse quickly.
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 low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers the basic purpose but lacks usage context and detailed parameter guidance, which are minor gaps in this simple case.
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 the description must compensate. It explains that 'job_urn' identifies 'a specific job posting', adding meaning beyond the schema's type definition. However, it doesn't clarify the URN format, examples, or where to obtain it, leaving gaps in parameter understanding.
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 ('Fetch details') and resource ('for a specific job posting'), distinguishing it from siblings like 'linkedin_search_jobs' which searches rather than fetches details. However, it doesn't explicitly differentiate from other get tools like 'linkedin_get_company_profile' beyond the resource type.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), when not to use it, or how it differs from similar tools like 'linkedin_search_jobs' for broader queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_member_profileGet Member ProfileA
Fetch a specific member's profile by their URN (e.g., 'urn:li:person:123').
| Name | Required | Description | Default |
|---|---|---|---|
| member_urn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the burden of behavioral disclosure. It describes a read-only fetch operation, which aligns with the tool name and purpose, but does not mention rate limits, authentication requirements, error handling, or what data is returned (though an output schema exists). It adds minimal context beyond the basic action, leaving 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 a single, efficient sentence that front-loads the key information ('Fetch a specific member's profile') and includes a helpful example. There is no wasted text, and it directly supports the tool's purpose without redundancy, making it highly concise and well-structured.
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 simple input schema (one required parameter) and the presence of an output schema, the description is mostly complete. It covers the parameter semantics well but lacks details on authentication, rate limits, or error scenarios. For a read-only fetch tool, this is adequate, though adding a bit more behavioral context would enhance completeness.
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 fully compensates by explaining the 'member_urn' parameter's purpose and providing a concrete example ('urn:li:person:123'). This adds essential meaning beyond the bare schema, clarifying the parameter's format and usage, which is critical for correct tool invocation.
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 specific action ('Fetch') and resource ('a specific member's profile'), distinguishing it from sibling tools like 'linkedin_get_my_profile' (which fetches the user's own profile) or 'linkedin_search_people' (which searches for multiple profiles). It provides a concrete example of the required parameter format ('urn:li:person:123'), 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?
The description implicitly indicates when to use this tool—when you have a specific member's URN and need their profile. However, it does not explicitly state when not to use it (e.g., vs. 'linkedin_search_people' for broader searches) or mention prerequisites like authentication, though the context of sibling tools suggests it's part of a LinkedIn API suite. The guidance is clear but lacks explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_my_profileGet My ProfileA
Fetch the authenticated user's profile information (Name, Email, Picture).
| 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?
The description adds value beyond annotations by specifying the data fields returned (Name, Email, Picture), which isn't covered in annotations. However, it doesn't disclose additional behavioral traits like authentication requirements, rate limits, or error handling. With annotations limited to title only, the description carries more burden but does not fully compensate.
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 a single, well-structured sentence that efficiently conveys the tool's purpose, scope, and output fields. It is front-loaded with the key action and resource, with no wasted 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 the tool's low complexity (0 parameters, read-only operation implied by 'Fetch'), an output schema exists, and annotations are minimal, the description is reasonably complete. It specifies the returned data fields, which complements the output schema. However, it could benefit from mentioning authentication context or usage constraints.
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, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately focuses on the tool's purpose without redundant parameter info, earning a high score for efficiency.
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 specific action ('Fetch') and resource ('authenticated user's profile information'), explicitly listing the data fields returned (Name, Email, Picture). It distinguishes from siblings like 'linkedin_get_member_profile' by specifying it's for the authenticated user only.
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 states when to use this tool: to fetch the authenticated user's profile. It implies when not to use it (e.g., for other users' profiles, where 'linkedin_get_member_profile' would be the alternative). This provides clear context for selection among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_oauth_urlGet LinkedIn Auth URLA
Generate the LinkedIn OAuth 2.0 authorization URL for browser login.
| 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?
Annotations provide only a title, so the description carries full burden. It correctly describes the tool's function but doesn't disclose behavioral traits like whether this requires prior configuration, what permissions/scopes the URL includes, rate limits, or error conditions. The description adds basic context but lacks operational details.
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?
Single sentence with zero waste - every word contributes essential information. Front-loaded with the core action and resource, efficiently structured for immediate understanding.
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 simple purpose (generate URL), no parameters, and existence of an output schema (which presumably documents the URL format), the description is reasonably complete. However, it could benefit from mentioning typical next steps (like redirecting users to the URL) for full context.
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 0 parameters and 100% schema description coverage, the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and the schema already documents this completely.
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 specific action ('Generate') and resource ('LinkedIn OAuth 2.0 authorization URL') with precise scope ('for browser login'). It distinguishes from sibling tools like 'linkedin_exchange_code' which handles token exchange rather than URL generation.
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 implies usage context ('for browser login') suggesting this tool is for initiating OAuth flow, but doesn't explicitly state when to use it versus alternatives like direct API calls or other auth methods. No explicit exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_post_commentsGet CommentsB
Get comments for a specific post/share.
| Name | Required | Description | Default |
|---|---|---|---|
| object_urn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (only a title), so the description carries the burden of behavioral disclosure. It implies a read-only operation by using 'Get', but does not specify aspects like authentication needs, rate limits, pagination, or error handling. No contradiction with annotations exists, but it adds limited context beyond the basic action.
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 a single, direct sentence with no wasted words, making it highly concise and front-loaded. Every part contributes to understanding the tool's basic function efficiently.
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 moderate complexity (a read operation with one parameter) and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and low parameter coverage, it should provide more context on usage and parameters to be fully 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?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'for a specific post/share', which hints at the 'object_urn' parameter's purpose, but does not explain the format, syntax, or how to obtain it. This adds some meaning but is insufficient for full clarity.
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 ('Get') and target resource ('comments for a specific post/share'), making the purpose understandable. However, it does not explicitly differentiate from sibling tools like 'linkedin_get_recent_posts' or 'linkedin_search_companies', which might also involve retrieving content, so it lacks sibling distinction for a perfect score.
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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as needing a valid post identifier, or compare it to siblings like 'linkedin_get_recent_posts' for broader queries, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_get_recent_postsGet Recent PostsA
List the user's recent posts (Requires 'r_member_social' permission).
| 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?
Annotations are minimal (only a title), so the description carries the burden of behavioral disclosure. It adds the permission requirement, which is valuable context beyond the annotations. However, it doesn't describe other traits like rate limits, pagination, or what 'recent' means in terms of time range, leaving 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 a single, efficient sentence that states the action and includes a key prerequisite. It is front-loaded with the main purpose and avoids any unnecessary details, making it highly concise and well-structured.
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 complexity (a read operation with no parameters) and the presence of an output schema (which handles return values), the description is adequate but minimal. It covers the purpose and a permission requirement, but lacks details on behavioral aspects like scope or limitations, making it just sufficient for basic use.
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 parameters with 100% coverage, meaning no parameters are documented in the schema. The description doesn't mention any parameters, which is appropriate here. It adds no semantic details beyond the schema, but with zero parameters, the baseline is 4 as it doesn't need to compensate for missing information.
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 ('List') and resource ('user's recent posts'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'linkedin_get_post_comments' or 'linkedin_search_people', which might also retrieve posts or related content, so it falls short of a perfect score.
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 a prerequisite ('Requires 'r_member_social' permission'), which provides some context for when to use it, but it doesn't offer explicit guidance on when to choose this tool over alternatives like 'linkedin_get_post_comments' or 'linkedin_search_people' for post-related queries. Usage is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_search_companiesSearch CompaniesB
Search for companies on LinkedIn by keywords.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the burden of behavioral disclosure. It states the search functionality but doesn't add context about rate limits, authentication needs, result format, or pagination. This is minimal but not contradictory, scoring a baseline 3 for adding some value beyond the sparse annotations.
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 a single, efficient sentence with zero waste. It's front-loaded and appropriately sized for the tool's complexity, earning a top score for conciseness.
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 has an output schema (which handles return values) and low complexity, the description is somewhat complete but lacks usage context and behavioral details. It's adequate as a basic search tool description but misses opportunities to guide the agent effectively.
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 the description must compensate. It mentions 'by keywords,' which aligns with the single parameter 'keywords,' adding semantic meaning. However, it doesn't detail syntax, format, or examples, leaving gaps. With one parameter and partial compensation, a score of 3 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 action ('Search for companies') and the resource ('on LinkedIn'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'linkedin_search_people' or 'linkedin_search_jobs', which would require a 5.
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 provides no guidance on when to use this tool versus alternatives like 'linkedin_get_company_profile' or other search tools. It lacks context about use cases, prerequisites, or exclusions, offering only a basic functional statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_search_jobsSearch JobsB
Search for jobs on LinkedIn by keywords and optional location.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries full burden. It mentions searching but doesn't disclose behavioral traits like pagination, result limits, authentication requirements, rate limits, or what the output contains. For a search tool with no annotation coverage, this leaves significant gaps in understanding its operation.
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 a single, efficient sentence that front-loads the core purpose. Every word earns its place, with no redundant information or unnecessary elaboration, making it easy to parse quickly.
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 moderate complexity (search with two parameters), no annotations, and an output schema present, the description is minimally adequate. It covers the basic purpose but lacks context on usage, behavior, and parameter details, relying on the output schema for return values without explaining them.
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 the description must compensate. It adds meaning by explaining that 'keywords' are used for searching and 'location' is optional, which clarifies beyond the bare schema. However, it doesn't detail format (e.g., city names, coordinates) or constraints, leaving parameters partially documented.
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 ('Search for jobs') and resource ('on LinkedIn'), with specific filtering criteria ('by keywords and optional location'). It distinguishes from siblings like linkedin_search_companies or linkedin_search_people by focusing on jobs, but doesn't explicitly differentiate from other job-related tools like linkedin_get_job_details.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over linkedin_get_job_details (for specific job details) or linkedin_search_companies/people (for other search types), nor does it specify prerequisites like authentication or rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_search_peopleSearch PeopleC
Search for people on LinkedIn by keywords.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries full burden for behavioral disclosure. It mentions searching by keywords but doesn't explain what the search returns (e.g., profiles, contact info), any limitations (e.g., rate limits, authentication needs), or how results are structured. This leaves significant gaps for a search tool.
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 a single, direct sentence with no wasted words, making it highly concise and front-loaded. It efficiently communicates the core function without unnecessary elaboration, earning full marks for brevity and clarity.
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 low complexity (one parameter) and the presence of an output schema, the description is minimally adequate. However, it lacks details on behavioral aspects like search scope or limitations, and with no annotations to fill gaps, it doesn't fully prepare an agent for effective use, scoring at the baseline for viability.
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 0% schema description coverage and one parameter ('keywords'), the description adds minimal value beyond the schema. It specifies that searching is 'by keywords,' which gives a hint about the parameter's purpose, but doesn't detail format, examples, or constraints, failing to compensate for the low schema coverage.
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 ('Search for people') and resource ('on LinkedIn'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'linkedin_search_companies' or 'linkedin_search_jobs' beyond the resource type, which keeps it from a perfect score.
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 provides no guidance on when to use this tool versus alternatives like 'linkedin_get_member_profile' for specific profiles or 'linkedin_search_companies' for company searches. It lacks context about use cases, prerequisites, or exclusions, offering only a basic functional statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_update_postUpdate PostA
Update a post's text. ⚠️ Warning: This deletes the old post and creates a new one with a new ID, as LinkedIn does not support editing published posts via API.
| Name | Required | Description | Default |
|---|---|---|---|
| post_urn | Yes | ||
| 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?
Annotations only provide a title, so the description carries full burden. It discloses key behavioral traits: the operation deletes the old post and creates a new one with a new ID, and notes LinkedIn's API limitation. This adds crucial context beyond basic annotations.
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 followed by a critical warning. Every word earns its place, with no redundancy or fluff, making it 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?
Given the tool's complexity (destructive update), lack of rich annotations, and presence of an output schema, the description is complete. It covers purpose, behavioral nuances, and usage context, compensating well for minimal structured data.
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 0% schema description coverage, the description adds value by implying parameters (post_urn for the post to update, text for new content). However, it doesn't detail all three parameters (e.g., visibility's default or meaning), leaving some gaps.
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 specific action ('Update a post's text') and resource ('post'), distinguishing it from siblings like linkedin_create_post (creation) and linkedin_delete_post (deletion). It precisely defines the operation's scope.
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?
It explicitly states when to use this tool (to update post text) and provides a critical warning about LinkedIn's API limitation, which implicitly guides usage by highlighting its destructive nature and alternative considerations. This addresses the tool's unique context among siblings.
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.
17 tool updates
- First observed
linkedin_create_comment - First observed
linkedin_create_image_post - First observed
linkedin_create_post - First observed
linkedin_delete_comment - First observed
linkedin_delete_post - First observed
linkedin_exchange_code - First observed
linkedin_get_company_profile - First observed
linkedin_get_job_details - First observed
linkedin_get_member_profile - First observed
linkedin_get_my_profile - First observed
linkedin_get_oauth_url - First observed
linkedin_get_post_comments - First observed
linkedin_get_recent_posts - First observed
linkedin_search_companies - First observed
linkedin_search_jobs - First observed
linkedin_search_people - First observed
linkedin_update_post
TDQS
Every tool has a clearly distinct purpose targeting specific LinkedIn resources and actions. For example, linkedin_create_post, linkedin_create_image_post, and linkedin_create_comment handle different content types, while search tools (companies, jobs, people) and get tools (profile, post details) are well-separated. No tools appear to overlap in functionality.
All tools follow a consistent 'linkedin_verb_noun' pattern with snake_case throughout. The verbs are appropriate and predictable (e.g., create, delete, get, search, update), and nouns clearly indicate the resource (e.g., post, comment, profile). There are no deviations in naming conventions.
With 17 tools, the count is slightly high but reasonable for a comprehensive LinkedIn API server covering posts, comments, profiles, companies, jobs, and OAuth. It includes core CRUD operations and search functionalities, though it might benefit from slight consolidation in some areas like OAuth-related tools.
The tool set provides strong coverage for LinkedIn's social and professional features, including create, read, update, delete for posts and comments, profile fetching, and searches. Minor gaps include lack of tools for liking/reacting to content or managing connections, but agents can perform core workflows effectively without dead ends.
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.
Let AI tools securely access your LinkedIn network and DMs
Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.
Related MCP Servers
- FlicenseAqualityNot gradedmaintenanceEnables AI assistants to interact with LinkedIn and LinkedIn Sales Navigator for searching profiles, managing leads, and handling messaging via cookie-based authentication. It supports professional networking tasks such as sending connection requests and retrieving account details through the Model Context Protocol.221-
- 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.2015MIT
Appeared in Searches
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/SARAMALI15792/Linkedin_mcp_custom_server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server