unipile-linkedin-mcp
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., "@unipile-linkedin-mcpFind me CTOs at startups using Sales Navigator"
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.
Unipile LinkedIn MCP Server
A fully-featured Model Context Protocol (MCP) server for the Unipile LinkedIn API. Enables AI assistants to interact with LinkedIn for search, messaging, connections, and Sales Navigator features.
Features
LinkedIn Search - People, companies, and posts search with Classic and Sales Navigator filters
Profile Management - View profiles, company pages, and your own profile
Connections - Send/accept/decline invitations, list connections
Messaging - List chats, send messages, start conversations
InMail - Send InMail to non-connections (Premium/Sales Navigator)
Sales Navigator - Advanced filters like tenure, seniority, company headcount
Related MCP server: MCP LinkedIn Sales Navigator
Installation
Using uvx (recommended)
uvx unipile-linkedin-mcpUsing pip
pip install unipile-linkedin-mcpConfiguration
Environment Variables
Set these environment variables before running:
export UNIPILE_API_KEY="your-api-key"
export UNIPILE_BASE_URL="https://api13.unipile.com:14376/api/v1"
export UNIPILE_ACCOUNT_ID="your-account-id"Or create a .env file in your working directory.
Claude Desktop Configuration
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"unipile-linkedin": {
"command": "uvx",
"args": ["unipile-linkedin-mcp"],
"env": {
"UNIPILE_API_KEY": "your-api-key",
"UNIPILE_BASE_URL": "https://api13.unipile.com:14376/api/v1",
"UNIPILE_ACCOUNT_ID": "your-account-id"
}
}
}
}Available Tools (22 total)
Search
Tool | Description |
| Search people with Classic LinkedIn filters |
| Search with Sales Navigator advanced filters |
| Search for companies |
| Search LinkedIn posts/content |
| Get valid filter IDs (locations, industries, etc.) |
Profiles
Tool | Description |
| List all connected LinkedIn accounts |
| Get authenticated user's profile |
| Get any user's full profile |
| Get company page details |
Connections
Tool | Description |
| Send connection request (max 300 char message) |
| View pending outbound invites |
| View inbound connection requests |
| Accept a connection request |
| Decline a connection request |
| Withdraw a sent invitation |
| List 1st degree connections |
Messaging
Tool | Description |
| List message conversations |
| Get messages from a chat |
| Send message in existing chat |
| Start new conversation with connections |
InMail (Premium)
Tool | Description |
| Send InMail to non-connections |
| Check remaining InMail credits |
Usage Examples
Search for People
# Classic LinkedIn search
search_people(keywords="software engineer", location=["103644278"], limit=10)
# Sales Navigator search with advanced filters
search_people_sales_nav(
keywords="CTO",
company_headcount=[{"min": 51, "max": 200}],
changed_jobs=True,
seniority_level=["Director", "VP"]
)Get Search Parameter IDs
# Find location IDs
get_search_params(param_type="LOCATION", query="San Francisco")
# Find industry IDs
get_search_params(param_type="INDUSTRY", query="Software")Send a Connection Request
send_invitation(
provider_id="ACoAAB...",
message="Hi! I'd love to connect."
)Start a Conversation
# With 1st degree connection
start_chat(
attendees_ids=["ACoAAB..."],
text="Hello! Great connecting with you."
)
# InMail to non-connection (requires credits)
send_inmail(
attendees_ids=["ACoAAB..."],
subject="Quick question",
text="Hi, I noticed your work at..."
)Getting Unipile Credentials
Sign up at Unipile
Connect your LinkedIn account
Get your API key and account ID from the dashboard
Note your base URL (varies by region)
Rate Limits
Unipile recommends these daily limits:
Profile views: 80-100/day (Classic), 150/day (Sales Nav)
Invitations: 80-100/day (paid), 15/week (free)
Messages: 100-150/day
License
MIT License - see LICENSE for details.
Contributing
Contributions welcome! Please open an issue or PR on GitHub.
Available Tools
22 toolsaccept_invitationA
Accept a received connection request.
Args: invitation_id: The ID of the invitation to accept (from list_invitations_received)
Returns: Confirmation of acceptance
| Name | Required | Description | Default |
|---|---|---|---|
| invitation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states 'Accept' without disclosing side effects, required permissions, rate limits, or whether the action is reversible. The mutation behavior is implied but not elaborated.
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 extremely concise, using only necessary sentences. No wasted words, and the structure (description, args, returns) is logical.
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 one parameter and no complex output, the description is adequate but could be improved by specifying the confirmation format and potential errors. The returns section is vague ('Confirmation of acceptance').
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 description adds meaning by referencing 'from list_invitations_received' for the invitation_id, but does not explain the parameter format or constraints. Schema coverage is 0%, so the description partially compensates but falls short of 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 uses a specific verb ('Accept') and resource ('received connection request'), clearly distinguishing it from sibling tools like 'decline_invitation' or 'send_invitation'.
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 states the action and references 'list_invitations_received' as a prerequisite, providing clear context. However, it does not explicitly state when not to use this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_invitationA
Withdraw a sent connection request that hasn't been accepted yet.
Args: invitation_id: The ID of the sent invitation to cancel (from list_invitations_sent)
Returns: Confirmation of cancellation
| Name | Required | Description | Default |
|---|---|---|---|
| invitation_id | 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 accurately describes the action as 'withdraw a sent connection request', but does not disclose potential consequences (e.g., if already accepted) or permissions needed.
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 sentences are used efficiently: action, parameter description, and return value. No unnecessary words, and the key information is front-loaded.
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?
With only one required parameter and no output schema, the description fully covers input and output expectations for the simple operation.
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 description explains that invitation_id comes from list_invitations_sent, adding crucial context beyond the schema's type string, guiding the agent to a valid source.
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 'Withdraw' and the resource 'sent connection request', distinguishing it from sibling tools like accept_invitation and decline_invitation which operate on received invitations.
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 specifies that the invitation must be 'sent' and 'not accepted yet', providing clear context. The sibling tool names list accept_invitation and decline_invitation, which imply when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decline_invitationA
Decline a received connection request.
Args: invitation_id: The ID of the invitation to decline (from list_invitations_received)
Returns: Confirmation of decline
| Name | Required | Description | Default |
|---|---|---|---|
| invitation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states it declines an invitation and returns confirmation, but omits details like side effects (e.g., removal from list), authentication needs, or rate limits. For a simple tool, this is adequate but not comprehensive.
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 extremely concise—one sentence for purpose, then an Args section. Every word earns its place, and the structure is front-loaded with the action.
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 (one parameter, no output schema), the description is sufficiently complete. It covers the action, parameter meaning, and expected outcome. Minimal gaps exist, such as not specifying the exact return format, but not critical.
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?
Although schema description coverage is 0%, the description adds meaningful context for the only parameter: 'invitation_id: The ID of the invitation to decline (from list_invitations_received).' This explains where to obtain the value, going beyond the bare 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?
The description clearly states the tool's purpose: 'Decline a received connection request.' It uses a specific verb (decline) and resource (invitation), distinguishing it from sibling tools like accept_invitation and cancel_invitation.
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 noting the invitation_id should come from list_invitations_received. However, it doesn't explicitly contrast with accept_invitation or cancel_invitation, nor does it state when not to use it. Still, the intent is clear given sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_messagesA
Get messages from a specific chat conversation.
Args: chat_id: The chat/conversation ID (from list_chats) limit: Max messages per page (default 50) cursor: Pagination cursor from previous response
Returns: List of messages in the chat with sender info and timestamps
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
As no annotations are provided, the description carries full burden. It describes return format with sender info and timestamps, and mentions pagination. However, it does not explicitly state that the operation is read-only or disclose any side effects, which would help an agent understand safety.
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 brief and well-structured with Args and Returns sections. Every sentence is necessary and front-loaded with the purpose. No 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 simplicity of the tool (3 parameters, no output schema, no annotations), the description covers essential aspects: required chat_id, pagination with limit and cursor, return format. It lacks details on error handling or rate limits, but is reasonably complete for a read operation.
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 significant meaning: explains chat_id as from list_chats, limit as max per page with default 50, and cursor as pagination from previous response. This compensates for the lack of schema param descriptions.
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 'Get messages from a specific chat conversation,' specifying the verb and resource. It distinguishes from sibling tools like list_chats, send_message, start_chat by focusing on retrieval of messages.
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 that chat_id comes from list_chats and explains pagination parameters, but does not explicitly state when to use this tool versus alternatives like list_chats (which lists chats themselves) or send_message (which sends messages). No exclusion criteria or context for 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.
get_company_profileA
Get a company's LinkedIn profile/page details.
Args: company_id: The LinkedIn company ID or vanity URL name
Returns: Company profile data including description, industry, size, specialties, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| company_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the return data composition (description, industry, etc.) but does not mention that it is a read-only operation, any authentication prerequisites, rate limits, or error behaviors. The description does not add value beyond the obvious 'get' semantics.
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 extremely concise: a single line for purpose, then a clear Args block and Returns block. It is front-loaded with the main action and has no redundant information. Every sentence serves a purpose.
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 one parameter and no output schema, the description is mostly complete. It explains the input and gives examples of output fields. However, it could be improved by noting that the output is a JSON object with a defined structure (though no schema exists). Overall, it adequately covers the essential information for an agent to use the 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 coverage is 0%, but the description explicitly explains the only parameter: 'company_id: The LinkedIn company ID or vanity URL name.' This adds critical context about acceptable input types, which is not present in the schema (which only states type: string).
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's function: 'Get a company's LinkedIn profile/page details.' This specifies a verb ('Get') and a resource ('company profile'), distinguishing it from sibling tools like 'get_my_profile' (personal profile) and 'search_companies' (search functionality).
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?
Usage is implied (use when you need a company's profile by ID), but no explicit guidance on when to use this tool over siblings, such as 'search_companies' for finding companies by name, or 'get_profile' for people. No when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inmail_creditsA
Check remaining InMail credits for the connected LinkedIn account.
InMail credits are used when messaging non-connections. Premium users get a monthly allocation that varies by subscription tier.
Returns: Current InMail credit balance and any additional quota info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool 'checks' and 'returns' data, but does not explicitly state that it is read-only, safe, or mention any authentication or rate limit considerations. It lacks behavioral context beyond the basic 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 five sentences and includes necessary background information. It is fairly concise and every sentence adds value, though it could be slightly more streamlined by integrating the background into the main statement.
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 no parameters and no output schema, the description is complete. It explains the purpose, provides context about InMail credits, and describes the return value. There are no gaps in information.
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 zero parameters and schema coverage is 100%. The description does not need to add parameter meaning because there are none. According to the rubric, baseline for 0 parameters is 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 uses a specific verb ('Check') and clearly identifies the resource ('InMail credits for the connected LinkedIn account'). It distinguishes itself from sibling tools like 'send_inmail' and 'send_invitation' by focusing solely on credit checking.
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 background on when InMail credits are used and that premium users have variations, but it does not explicitly state when to use this tool versus alternatives or provide any usage exclusions. The guidance is implicit rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_profileA
Get the authenticated user's full LinkedIn profile.
Returns comprehensive profile data including name, headline, summary, experience, education, skills, and more for the currently connected account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It states the tool 'gets' data, implying a read-only operation, but does not explicitly declare safety, authentication requirements, or potential side effects. For a read tool, this is minimally adequate but lacks full transparency.
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 two sentences, front-loading the purpose and listing return contents. No extraneous information, every sentence earns its place.
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 no output schema, the description fully covers what the tool does and what it returns. No gaps remain given the simplicity.
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 zero parameters, so the description does not need to add parameter meaning. Baseline 4 applies as no additional parameter documentation is required.
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 specifies the tool retrieves the authenticated user's LinkedIn profile, with a verb 'Get' and a specific resource. It distinguishes from sibling tool 'get_profile' by emphasizing 'authenticated user's' and 'currently connected account', implying that the sibling retrieves other profiles.
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 when needing the current user's full profile, but provides no explicit guidance on when to use this tool versus alternatives like 'get_profile' or 'search_people'. No when-not-to-use 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.
get_profileA
Get a LinkedIn user's full profile by their provider ID.
Args: provider_id: The LinkedIn provider ID (from search results or profile URL) sections: Optional list of sections to include. Available sections: - about - experience - education - skills - certifications - languages - volunteering_experience - projects - recommendations_received - recommendations_given If not specified, returns all available sections.
Returns: Full profile data including requested sections
| Name | Required | Description | Default |
|---|---|---|---|
| provider_id | Yes | ||
| sections | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It describes the return as 'Full profile data including requested sections' and notes that omitting sections returns all. However, it does not explicitly state that the operation is read-only or mention any authentication or error conditions.
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 well-structured with Args and Returns sections, concise, and includes all necessary details without redundancy. 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 simplicity (2 params, no output schema), the description is fairly complete. It explains the return type and parameter details. Minor gap: it could differentiate from get_my_profile more explicitly, but overall sufficient.
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 description adds significant meaning beyond the schema: it explains that provider_id comes from search results or profile URL, and it lists all available section options. Since schema description coverage is 0%, the description fully compensates.
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 purpose: 'Get a LinkedIn user's full profile by their provider ID.' It uses a specific verb ('Get') and resource ('full profile'), and distinguishes from sibling tools like get_my_profile (for own profile) and get_company_profile.
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 specifies when to use: 'by their provider ID (from search results or profile URL).' It provides context but does not explicitly exclude alternative tools like get_my_profile or search_people.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_paramsA
Get valid parameter IDs for search filters.
LinkedIn search filters require specific IDs (not names). Use this tool to look up the IDs for locations, industries, companies, etc.
Args: param_type: Parameter type (case-insensitive) - one of: Common parameters: - "LOCATION" - Geographic locations - "INDUSTRY" - Industry categories - "COMPANY" - Companies - "SCHOOL" - Educational institutions - "PEOPLE" - People - "CONNECTIONS" - Connections - "SERVICE" - Services - "JOB_FUNCTION" - Job functions - "JOB_TITLE" - Job titles - "EMPLOYMENT_TYPE" - Employment types - "SKILL" - Skills
Sales Navigator specific:
- "REGION" - Regions
- "DEPARTMENT" - Departments
- "PERSONA" - Personas
query: Optional search string to filter results (e.g., "San Francisco")Returns: List of valid parameter IDs and names for the specified type
| Name | Required | Description | Default |
|---|---|---|---|
| param_type | Yes | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly indicates this is a read-only lookup operation that returns a list of IDs and names. It does not mention potential side effects, rate limits, or authentication requirements, but for a simple lookup tool, the transparency is adequate.
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 well-structured with a brief intro, a clear explanation, a bulleted list of parameter values, and a return description. It is concise yet comprehensive, with no redundant 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 and the absence of complex inputs/outputs, the description is complete. It explains the purpose, parameters, and return value adequately. No output schema is needed as the return description suffices.
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?
Despite the input schema having no descriptions (0% coverage), the tool description provides exhaustive documentation for both parameters: it lists all possible values for param_type (categorized) and explains the optional query parameter with an example. This greatly exceeds the schema and adds crucial meaning.
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's purpose: 'Get valid parameter IDs for search filters.' It explains that LinkedIn search filters require IDs, and this tool looks up those IDs. This distinguishes it from sibling tools like search_people or search_companies, which perform actual searches rather than providing lookup IDs.
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 explains the tool's use case: to look up IDs for locations, industries, companies, etc., for search filters. However, it does not explicitly state when not to use the tool or mention alternative tools. The usage context is implied but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
List all connected LinkedIn accounts.
Returns information about all accounts linked to your Unipile integration, including account IDs, status, and provider information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It states the tool lists accounts and returns information, but does not explicitly confirm it is a read-only operation or disclose any side effects, auth requirements, or rate limits. For a list tool, the lack of explicit behavioral disclosure is a minor gap.
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 exceptionally concise: two sentences, front-loaded with the action, and every word adds value. No redundancy or fluff.
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 parameterless list tool with no output schema, the description provides sufficient context: it states what the tool does and what information it returns. It could optionally mention that it returns all accounts (no filtering), but that is implied.
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?
There are no parameters, so schema coverage is 100% by default. The description adds meaningful context about the output (account IDs, status, provider), which is valuable since there is no output 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?
The description clearly states 'List all connected LinkedIn accounts' and specifies the returned information (account IDs, status, provider). It is a specific verb+resource and is well-distinguished from sibling tools that handle invitations, messages, profiles, etc.
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 explicit guidance on when to use this tool versus alternatives. The description implies its use for listing accounts, but does not mention when not to use it or suggest other tools for different contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chatsA
List LinkedIn message conversations.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response unread_only: If True, only return chats with unread messages
Returns: List of chat conversations with latest message preview
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| unread_only | No |
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 that the tool returns a 'list of chat conversations with latest message preview' and implies pagination via limit and cursor, but lacks details on ordering, rate limits, or side effects.
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 short and includes Args and Returns sections, making it easy to scan. It could be slightly more concise but is 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 3 parameters, no output schema, and no annotations, the description covers the basics but is incomplete. It does not specify the default sorting order or the structure of the returned conversations beyond a preview.
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 adds significant meaning: limit is 'Max results per page', cursor is 'Pagination cursor from previous response', and unread_only is 'If True, only return chats with unread messages'. This fully compensates for the lack of schema descriptions.
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 'List LinkedIn message conversations,' which is a specific verb+resource. It distinguishes from sibling tools like get_chat_messages (which gets messages within a chat) and start_chat (creates a new chat).
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 explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or provide context for switching to other chat-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invitations_receivedA
List inbound connection requests awaiting response.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response
Returns: List of pending received invitations with sender details
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
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 explains the tool is read-only and lists results with sender details, but does not cover auth needs, rate limits, or potential empty results. Adequate but not rich.
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 concise with a clear purpose statement, followed by parameter explanations and return type. Every sentence adds value with no unnecessary text.
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 list tool with two parameters and no output schema, the description fully covers the purpose, parameters, and return value. It is complete and self-contained.
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 description adds meaning to both parameters: limit is 'Max results per page (default 50)' and cursor is 'Pagination cursor from previous response'. This compensates for the 0% schema description 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 tool lists 'inbound connection requests awaiting response', specifying the resource and state. This distinguishes it from sibling tools like 'list_invitations_sent' and action tools like 'accept_invitation'.
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 viewing pending invitations, but does not explicitly provide when-not-to-use or contrast with alternative tools beyond the name. Clear context, no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invitations_sentA
List pending outbound connection requests.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response
Returns: List of pending sent invitations with recipient details
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description is key. It indicates listing returns a list with recipient details but does not disclose read-only nature or other behavioral traits like idempotency. Adequate but minimal.
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?
Extremely concise with no wasted words. Front-loaded purpose, then parameter explanations, and return description. 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?
Adequate for a simple list tool with pagination. However, no output schema and no mention of sorting or filtering. With no annotations, additional context like rate limits or result structure would improve 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?
Schema has 0% description coverage, but the description explains limit as 'Max results per page (default 50)' and cursor as 'Pagination cursor from previous response,' adding meaning beyond types and defaults.
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 'List pending outbound connection requests,' identifying the verb and resource. Distinguishes from sibling tool list_invitations_received by specifying 'outbound'.
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?
Implies usage for viewing sent invitations but lacks explicit when-not or alternative comparisons. With siblings like accept_invitation and list_invitations_received, more guidance would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_relationsA
List your 1st degree connections on LinkedIn.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response
Returns: List of connections with profile summaries
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions pagination via cursor and returns 'List of connections with profile summaries,' which gives a basic behavioral picture. However, it does not disclose authentication requirements, rate limits, or whether the tool returns all connections or just one page. More detail would improve transparency.
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 concise, with a clear one-line purpose followed by parameter list and return description. It avoids fluff and is front-loaded. The structure could be improved with formatting, but it efficiently conveys essential 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?
The tool has two parameters, no output schema, and no annotations. The description explains the return value as 'List of connections with profile summaries,' which gives a general idea but lacks detail on the structure of each connection. For a simple list tool, it is adequate but not fully complete, especially without schema descriptions.
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 no descriptions for its two parameters (0% coverage), so the description must compensate. It adds meaning: 'limit: Max results per page (default 50)' and 'cursor: Pagination cursor from previous response,' which clarifies usage. However, it could add constraints like acceptable range for limit. Overall, it adds significant value beyond the bare 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?
The description clearly states 'List your 1st degree connections on LinkedIn,' specifying the verb (list), resource (1st degree connections), and context (LinkedIn). This distinguishes it from sibling tools like 'get_profile' or 'list_invitations_received' which have different purposes.
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 listing connections but does not explicitly state when to use this tool versus alternatives. It does not provide conditions for use or exclusion criteria (e.g., when to use search_people instead). While it is clear, it lacks proactive guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesA
Search for companies on LinkedIn.
Use get_search_params() to find valid IDs for industry and location filters.
Args: keywords: Company name or description keywords industry: List of industry IDs location: List of location IDs (headquarters) headcount_min: Minimum employee count headcount_max: Maximum employee count has_job_offers: True to find companies currently hiring limit: Max results per page (1-50, default 25) cursor: Pagination cursor from previous response
Returns: Search results with company profiles and pagination cursor
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | No | ||
| industry | No | ||
| location | No | ||
| headcount_min | No | ||
| headcount_max | No | ||
| has_job_offers | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes parameters and return values, including pagination, but does not disclose potential side effects, rate limits, or authentication requirements. Lacks depth for a complete behavioral picture.
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?
Description is concise with a brief purpose, a practical usage hint, and a clean Args/Returns format. Every sentence adds value, and the structure is front-loaded 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?
Covers all 8 parameters and explains return value (search results and pagination cursor). Lacks explicit mention of search scope (e.g., worldwide vs. regional) or edge cases, but is sufficient for an agent to use the tool 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?
Input schema has 0% parameter descriptions, but the description's Args section compensates fully by explaining each parameter's purpose (keywords, industry, location, headcount filters, has_job_offers, limit, cursor). This adds significant meaning beyond the schema's types and defaults.
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 'Search for companies on LinkedIn', specifying the action and target. It distinguishes from sibling tools like search_people and search_posts which have different targets.
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 explicit instruction to use get_search_params() for valid industry/location IDs, guiding the agent on prerequisites. Could add more alternatives (e.g., 'for detailed profile, use get_company_profile'), but the context from siblings is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_peopleA
Search for people on LinkedIn using Classic LinkedIn filters.
This is the standard LinkedIn search available to all users. Use get_search_params() to find valid IDs for location, industry, and company filters.
Args: keywords: Free text search (name, title, company, etc.) location: List of location IDs (use get_search_params to find IDs) industry: List of industry IDs company: List of current company IDs past_company: List of past company IDs network_distance: Connection degree [1, 2, 3] - 1=1st degree, 2=2nd degree, 3=3rd+ profile_language: ISO language codes (e.g., ["en", "fr"]) limit: Max results per page (1-50, default 25) cursor: Pagination cursor from previous response
Returns: Search results with profiles and pagination cursor
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | No | ||
| location | No | ||
| industry | No | ||
| company | No | ||
| past_company | No | ||
| network_distance | No | ||
| profile_language | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes pagination via cursor and basic search behavior, but does not disclose rate limits, authentication needs, or potential side effects. Adequate for a read-only 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?
Description is well-structured with Args and Returns sections, front-loaded with purpose. Slightly verbose but 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 no output schema, description explains returns ('Search results with profiles and pagination cursor'). All parameters described. Sibling tools provide context. Missing details like result count limits or error handling.
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 coverage is 0%, so description compensates well. It provides meaningful descriptions for all 9 parameters (e.g., 'Keywords: Free text search', 'network_distance: Connection degree [1,2,3]'), adding context beyond schema types and defaults.
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 'Search for people on LinkedIn using Classic LinkedIn filters', specifying the verb and resource. It distinguishes from siblings like 'search_companies' and 'search_people_sales_nav' by mentioning 'Classic LinkedIn filters', implying standard search.
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?
Description guides use of 'get_search_params()' to find valid IDs for filters, provides parameter details, and states 'This is the standard LinkedIn search available to all users.' It gives context but lacks explicit when-not-to-use vs. siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_postsA
Search for LinkedIn posts/content.
Args: keywords: Content keywords to search for (required) sort_by: "relevance" or "date" (default: relevance) date_posted: "past_day", "past_week", or "past_month" content_type: "videos", "images", or "documents" limit: Max results per page (1-50, default 25) cursor: Pagination cursor from previous response
Returns: Search results with posts and pagination cursor
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| sort_by | No | ||
| date_posted | No | ||
| content_type | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, rate limits, or authentication requirements. It only lists parameters and returns.
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 structured as a clear docstring with Args and Returns sections. Every sentence is informative and necessary, with no redundancy.
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 complexity (6 parameters, 1 required) and no output schema, the description covers all input parameters and mentions the return type (posts with pagination cursor). It is adequate but could include more detail on return fields.
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 significant meaning: it explains each parameter's purpose, provides allowed values for sort_by, date_posted, content_type, and notes the default and range for limit and cursor usage.
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 'Search for LinkedIn posts/content,' which is a specific verb+resource. It distinguishes from sibling tools like search_people and search_companies.
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 parameter options (sort_by, date_posted, content_type) that imply usage contexts, but it does not explicitly state when to use this tool versus alternatives. It is clear that it is for posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_inmailA
Send an InMail message to non-connections (requires LinkedIn Premium or Sales Navigator).
InMail allows you to message 2nd and 3rd degree connections without connecting first. Uses InMail credits - check get_inmail_credits() first.
Args: attendees_ids: List of LinkedIn provider IDs to message subject: InMail subject line (required for InMail) text: The message body content
Returns: Confirmation with sent InMail details
| Name | Required | Description | Default |
|---|---|---|---|
| attendees_ids | Yes | ||
| subject | Yes | ||
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description reveals key behavioral traits: requires Premium, uses InMail credits, targets non-connections. However, it omits details like credit consumption confirmation, rate limits, or asynchronous delivery.
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?
Concise and efficient: 3 sentences plus argument list. Front-loaded with purpose and prerequisite. No redundant content, but could improve structure with bullet points for args.
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?
Covers purpose, prerequisite, and basic param descriptions. Missing: output format, error handling (e.g., insufficient credits), rate limits, or message tracking details. Adequate but not comprehensive.
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 coverage, description adds meaning by naming required parameters and brief explanations. However, attendees_ids format is ambiguous ('LinkedIn provider IDs') and does not clarify expected structure 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?
Clear verb (send), resource (InMail message), and target audience (non-connections). Distinguishes from sibling tools like send_message and send_invitation by specifying the use case and requirement for LinkedIn Premium.
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 (messaging 2nd/3rd degree connections without connecting) and advises checking credits via get_inmail_credits() first. Provides clear prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_invitationA
Send a connection request to a LinkedIn user.
Note: LinkedIn limits invitation messages to 300 characters. Daily limits apply: ~80-100/day for paid accounts, ~15/week for free.
Args: provider_id: The LinkedIn provider ID of the person to connect with message: Optional personalized message (max 300 characters)
Returns: Confirmation of invitation sent or error
| Name | Required | Description | Default |
|---|---|---|---|
| provider_id | Yes | ||
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses limitations (character and daily limits) and return type (confirmation or error). No annotations, so description carries the burden well.
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?
Highly concise, with action first, then notes, then parameter descriptions. 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?
Adequate for a simple 2-param tool. Covers purpose, limitations, params, and return type. Could mention how to obtain provider_id, but not necessary.
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 coverage, description fully explains both parameters: provider_id as LinkedIn ID and message as optional with max 300 chars.
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 action: 'Send a connection request to a LinkedIn user.' Differentiates from siblings like accept_invitation and cancel_invitation.
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 practical constraints: character limit and daily limits. Does not explicitly mention when not to use, but context of sibling tools helps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageA
Send a message in an existing chat conversation.
Use this for ongoing conversations with existing connections. For new conversations, use start_chat instead.
Args: chat_id: The chat/conversation ID (from list_chats) text: The message content to send
Returns: Confirmation with sent message details
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ||
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Describes basic behavior (send message) and return value but lacks details on idempotency, rate limits, or constraints like character limits.
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?
Concise, well-structured: main sentence, usage guidance, then arg descriptions. Front-loaded with purpose.
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?
Adequate for a simple two-param tool. Distinguishes from key sibling (start_chat). Return value noted but vague. Could mention prerequisite of existing chat.
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 coverage 0%, but description explains chat_id as ID from list_chats and text as message content, adding meaning beyond schema types. Source for chat_id is helpful.
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 verb 'send' and resource 'message in existing chat conversation'. Distinguishes from sibling 'start_chat' for new conversations.
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 for ongoing conversations and alternatives new conversations with 'start_chat'. Provides clear context and when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_chatA
Start a new conversation with one or more LinkedIn users.
Use this to initiate messaging with 1st degree connections. For non-connections (2nd/3rd degree), use send_inmail instead.
Args: attendees_ids: List of LinkedIn provider IDs to message text: The initial message content
Returns: New chat details including chat_id for follow-up messages
| Name | Required | Description | Default |
|---|---|---|---|
| attendees_ids | Yes | ||
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions return of chat_id, but lacks details on authentication, rate limits, or side effects (e.g., immediate message delivery). Adequate but could be more thorough.
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?
Very concise: purpose, usage, args, returns in few sentences. No redundant information, easy to scan.
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?
Covers all essential aspects for a 2-param tool: purpose, usage guidelines, parameter explanations, return value. Lacks error conditions or validation but sufficient for typical 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 coverage is 0%, so description adds meaning: attendees_ids as 'LinkedIn provider IDs' and text as 'initial message content'. Clear but could specify ID format or 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?
Description explicitly states the tool starts a new conversation with LinkedIn users, specifically 1st degree connections. It clearly distinguishes from sibling tool send_inmail for non-connections.
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 explicit guidance: use for 1st degree connections, for 2nd/3rd degree use send_inmail instead. This directly helps agent decide when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, but there is some overlap between start_chat, send_inmail, and send_message which could cause confusion. The descriptions help differentiate them, but the boundaries between initiating a chat vs sending an InMail vs sending a message in an existing chat are not immediately clear. Similarly, search_people and search_people_sales_nav are similar but separate. Overall, good disambiguation with minor issues.
All tool names follow a consistent verb_noun pattern in snake_case. Names clearly indicate the action and target resource (e.g., get_profile, send_invitation, search_companies). There are no mixed conventions or ambiguous naming styles.
With 22 tools, the set is comprehensive but slightly high. However, each tool serves a distinct function covering multiple areas (profiles, search, messaging, invitations, accounts). The count is appropriate for the broad scope of LinkedIn automation, though it could be trimmed slightly.
The tool set covers core LinkedIn workflows: profile retrieval, searching (people, companies, posts), messaging (chats, InMail, invitations), and account management. Missing features like profile updates, message deletion, or advanced filtering are minor gaps. Overall, it's sufficiently complete for common use cases.
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.
Run LinkedIn outreach from your AI chat: find leads, launch campaigns, send, and reply.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI assistants to interact with LinkedIn by scraping profiles, companies, job postings, and getting personalized job recommendations using authenticated browser automation.173,321Apache 2.0
- AlicenseAqualityFmaintenanceEnables AI assistants to search leads, view profiles, manage lists, send InMails, and export data from LinkedIn Sales Navigator through browser automation.76MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to connect to LinkedIn, accessing profiles and companies, searching for jobs and people, managing saved jobs, updating job-search profile settings, and inspecting analytics.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with LinkedIn using the official API for profile access, company management, and job postings.Apache 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/bhaktatejas922/unipile-linkedin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server