Skip to main content
Glama
leandrojacome

LinkedIn Actions MCP

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.py

Copie .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 tools
apply_to_linkedin_jobC

Abre uma vaga, anexa o currículo e envia somente quando o formulário estiver completo.

ParametersJSON Schema
NameRequiredDescriptionDefault
answersNo
job_urlYes
confirmedNo
resume_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
confirmedNo
image_pathNo
visibilityNoPUBLIC
image_alt_textNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 2 tool updatesv0.1.0
    • First observedapply_to_linkedin_job
    • First observedpublish_linkedin_post

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    4
    MIT