LinkedIn Actions MCP
Click on "Deploy 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 Actions MCPpublish a text post on LinkedIn saying we're hiring, confirmed"
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 Actions MCP
Servidor MCP local da CodeSpec focado somente nas ações que faltam ao MCP de leitura:
publicar posts de texto ou imagem pela API oficial do LinkedIn;
preparar e enviar candidaturas simplificadas usando uma sessão local do navegador.
Limites importantes
A API pública do LinkedIn permite publicação quando o aplicativo possui os escopos necessários. Não existe uma API pública geral para um candidato se inscrever em vagas de terceiros. Por isso, a candidatura usa um navegador local persistente e nunca expõe a sessão por HTTP.
O servidor usa stdio, armazena o perfil do navegador apenas na máquina do usuário e não envia
cookies, tokens ou currículos para serviços intermediários.
Para staging privado, também pode usar Streamable HTTP vinculado exclusivamente ao endereço da tailnet. Não vincule o servidor a uma interface pública.
Related MCP server: LinkedIn Poster
Desenvolvimento
uv sync --all-groups
uv run patchright install chromium
uv run pytest
uv run fastmcp dev src/linkedin_actions_mcp/server.pyCopie .env.example para .env somente se for usar a API oficial de publicação. Nunca envie o
arquivo .env ao Git.
Staging pela tailnet
Defina LINKEDIN_TRANSPORT=http, LINKEDIN_HOST com o IP Tailscale local e mantenha a porta fora
da internet pública. O endpoint Streamable HTTP será /mcp.
Ferramentas
publish_linkedin_post
Cria uma prévia por padrão. Para publicar, informe confirmed=true. Requer
LINKEDIN_ACCESS_TOKEN e LINKEDIN_AUTHOR_URN. Para imagem, informe image_path e,
opcionalmente, image_alt_text; o servidor inicializa o upload, envia o arquivo e cria o post
pela API oficial, sem navegador.
apply_to_linkedin_job
Abre a vaga no navegador local e anexa o currículo quando o formulário solicitar. Sem
confirmed=true, prepara o fluxo sem enviar. Se houver perguntas ou etapas incompletas, retorna
um bloqueio legível e não declara a candidatura como enviada.
Segurança
transporte local por
stdio;validação do domínio da vaga e do arquivo PDF;
segredos apenas por variáveis de ambiente;
nenhuma credencial em logs;
CI com lint, testes e auditoria de dependências;
Dependabot semanal para dependências e GitHub Actions.
Licença
Apache-2.0.
Available Tools
2 toolsapply_to_linkedin_jobC
Abre uma vaga, anexa o currículo e envia somente quando o formulário estiver completo.
| Name | Required | Description | Default |
|---|---|---|---|
| answers | No | ||
| job_url | Yes | ||
| confirmed | No | ||
| resume_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions opening, attaching, and submitting only when complete, but it does not disclose what happens if the form is incomplete, how the 'answers' parameter is used, whether confirmation is required (despite the 'confirmed' parameter), or any authentication or rate-limit constraints. The behavior is under-specified.
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 concise sentence, which is efficient. However, it lacks structure and front-loading of key information. It does not separate the core action from caveats, and it omits essential parameter context, making it under-specified rather than simply concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the tool has four parameters with one required, and the workflow involves opening a job, attaching a resume, and submitting a form. The description does not explain the expected behavior when the form is incomplete, the role of the 'answers' and 'confirmed' parameters, or what the output represents. For an action with this complexity, the description is inadequate.
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 by explaining the parameters. It does not mention job_url, resume_path, answers, or confirmed at all. The description provides no meaning for any parameter, leaving the agent to infer everything from the schema alone, which is insufficient.
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 states a clear action: opens a job, attaches a resume, and submits when the form is complete. This clearly identifies the tool's purpose as applying to a LinkedIn job. However, it does not explicitly differentiate from the sibling tool 'publish_linkedin_post', though the names make the distinction obvious.
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 the tool should be used when applying to a job and when the form is complete, but it provides no explicit guidance on when to use it versus alternatives. It does not mention prerequisites, such as needing a valid job URL or resume path, or any conditions that would make this tool inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_linkedin_postC
Cria uma prévia ou publica texto e imagem no LinkedIn pela API oficial.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| confirmed | No | ||
| image_path | No | ||
| visibility | No | PUBLIC | |
| image_alt_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Não há annotations, então a descrição deveria revelar o comportamento de publicação externa, incluindo riscos e a necessidade de confirmação. Ela apenas menciona 'prévia ou publica', mas não explica que a publicação é provavelmente irreversível, nem como o fluxo de confirmação funciona via parâmetro 'confirmed'.
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?
A descrição é curta, direta e vai ao ponto, sem encher linguiça ou repetir o nome da ferramenta. Porém, é tão enxuta que omite informações essenciais, o que impede uma nota máxima nessa dimensão.
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?
Para uma ferramenta que publica conteúdo externo, com 5 parâmetros e modo de prévia/publicação, uma única frase é insuficiente. Faltam instruções sobre confirmação, visibilidade, upload de imagem e o que o retorno significa, mesmo considerando que existe output schema.
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?
Com 0% de cobertura de descrição no schema, a descrição deveria compensar explicando os parâmetros, mas só menciona 'texto e imagem'. Não esclarece o papel de 'confirmed', 'visibility' ou 'image_alt_text', deixando o agente sem informação suficiente para invocar a ferramenta corretamente.
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?
A descrição afirma claramente a ação ('cria uma prévia ou publica') e o recurso ('texto e imagem no LinkedIn'), o que diferencia a ferramenta do sibling apply_to_linkedin_job, que é voltado a candidaturas a vagas. Não é tautológica e transmite o propósito principal em uma frase específica.
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?
A descrição não oferece orientação sobre quando usar a prévia versus a publicação real, nem menciona alternativas ou condições de uso. O contexto de uso fica apenas implícito pelo nome da ferramenta, sem explicitar em que situações ela deve ser preferida.
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.
2 tool updates
v0.1.0- First observed
apply_to_linkedin_job - First observed
publish_linkedin_post
Related MCP Connectors
- linkedinOAuthio.reachium
LinkedIn campaigns, content, leads and inbox from your AI client. Scoped, revocable keys.
Draft, schedule and publish LinkedIn posts, reply to comments and read analytics via 2pr.io.
LinkedIn API as MCP tools to retrieve profile data and publish content. Powered by HAPI MCP.
Let AI tools securely access your LinkedIn network and DMs
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables posting text and media content directly to LinkedIn from Claude Desktop with support for authentication and visibility controls.11MIT
- FlicenseNot gradedqualityDmaintenanceEnables ChatGPT and Claude Desktop to post text content directly to your LinkedIn profile using the official LinkedIn UGC Posts API with OAuth 2.0 authentication.-
- AlicenseAqualityDmaintenanceEnables posting content, sharing articles, and managing LinkedIn profile through natural language using the official LinkedIn REST API with OAuth 2.0.78 npmMIT
- AlicenseAqualityBmaintenanceEnables local-only use of LinkedIn's official API to authenticate via OAuth, publish text posts, and read or reply to comments with explicit confirmation. Keeps access tokens in the OS keychain and avoids scraping or browser automation.4MIT