Skip to main content
Glama

LinkedIn: Get profile from URL

linkedin_get_profile_from_url
Read-onlyIdempotent

Resolve a full LinkedIn person profile URL into the real LinkedIn profile and stable system user ID required by downstream actions. Example: https://www.linkedin.com/in/john-doe-123/?trk=foo -> extract ONLY 'john-doe-123' from the /in/{public_identifier}/ pathname, ignore query parameters/fragments/trailing slash, call Get User Profile, and return the profile including result.id. Use result.id for connection requests, new conversations and other actions requiring user_id. Never pass the full URL to those action tools. LinkedIn system user ID: Stable LinkedIn user id, commonly ACo... for Classic profiles. Obtain with: linkedin_get_profile_from_url(profile_url) -> result.id; linkedin_get_profile(user_id_or_public_identifier) -> result.id; linkedin_search_people(...) -> selected result.id Never pass: full linkedin.com/in/... URL, person name, company ID. LinkedIn public identifier: Slug after /in/ in a LinkedIn profile URL. Example https://www.linkedin.com/in/john-doe/?trk=x -> john-doe. Obtain with: extract only pathname segment immediately after /in/; ignore query string, fragment and trailing slash Never pass: full URL, ACo system ID when a public identifier is specifically required.

Input Schema

NameRequiredDescriptionDefault
account_idNoOptional Nilyo connection ID (unipile_account_id from list_connected_accounts). Omit when the user has one account for this provider. When several exist, Nilyo never guesses: list them (display name, identifier, provider user ID), choose the one the user named or ask, and pass its ID here.
profile_urlYesFull linkedin.com/in/... person profile URL. Query parameters are ignored.
with_sectionsNoOptional LinkedIn Classic profile sections such as linkedin_experience, linkedin_education or linkedin_skills.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower. The description still adds real behavior: it normalizes the URL (extract only the /in/{public_identifier}/ slug, ignore query parameters/fragments/trailing slash) and discloses that the result carries result.id, plus an internal delegation to 'Get User Profile'. It omits auth/account prerequisites and any rate-limit or failure behavior, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is well front-loaded, but the body then repeats itself with two glossary blocks ('LinkedIn system user ID: ...' and 'LinkedIn public identifier: ...') that read like injected reference material and cycle through the same extraction rules and 'Never pass' warnings three times. Substantial content does not earn its place in a tool description.

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

Completeness4/5

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

With no output schema, the description compensates by naming the key return field (result.id) and its downstream consumers, and it clarifies URL normalization. Annotations cover the safety profile. It is close to complete for a 3-parameter resolver, missing only account-selection guidance and error behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces profile_url semantics ('extract ONLY john-doe-123 from the /in/{public_identifier}/ pathname') and the example URL, but the schema already states the URL format and that query parameters are ignored. with_sections and account_id are untouched in the description, so no meaning is added beyond the schema.

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

Purpose4/5

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

States a specific verb and resource: 'Resolve a full LinkedIn person profile URL into the real LinkedIn profile and stable system user ID.' It also names the downstream dependency (result.id) and references the sibling it delegates to ('call Get User Profile'), which separates it from linkedin_get_profile and linkedin_resolve_person. Slightly diluted by glossary-style text that restates the same idea, but the core purpose is unambiguous.

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

Usage Guidelines4/5

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

Explicitly tells the agent when the output is needed: 'Use result.id for connection requests, new conversations and other actions requiring user_id.' It also lists alternative sources of a user_id (linkedin_get_profile, linkedin_search_people), giving comparative context. It stops short of stating the inverse condition ('use when you only have a URL'), so routing is inferred rather than fully spelled out.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.