npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

linkedin-mcp-openworker

v1.0.0

Published

A local-first LinkedIn MCP server for OpenWorker.

Readme

LinkedIn MCP for OpenWorker

A local-first LinkedIn MCP server for OpenWorker. It runs over stdio, keeps tokens in environment variables or explicit tool inputs, and exposes small, approval-friendly tools for LinkedIn profile reads and post operations.

Tools

  • linkedin_start_oauth_flow starts the browser OAuth flow, captures the localhost callback, exchanges the code, and stores the token locally.
  • linkedin_auth_status reports whether a stored token exists and when it expires.
  • linkedin_logout deletes the stored token.
  • linkedin_exchange_authorization_code exchanges an OAuth code and stores the token, for manual fallback flows.
  • linkedin_get_my_profile reads the authenticated member profile from /v2/userinfo.
  • linkedin_create_text_post publishes or drafts a text-only post through /rest/posts.
  • linkedin_get_post retrieves a post by URN.
  • linkedin_find_posts_by_author lists posts for a member or organization URN.

Setup

npm i linkedin-mcp-openworker

Create a LinkedIn developer app and request the products/scopes you need:

  • openid profile email for Sign In with LinkedIn using OpenID Connect.
  • w_member_social to publish as the authenticated member.
  • Organization posting requires LinkedIn-approved organization scopes such as w_organization_social.

OpenWorker supports MCP servers through Manage -> Integrations using the same mcpServers JSON format as Claude Desktop and Cursor. After building, add a server like this:

{
  "mcpServers": {
    "linkedin": {
      "command": "npm",
      "args": ["linkedin-mcp-openworker"],
      "env": {
        "LINKEDIN_CLIENT_ID": "paste-your-linkedin-client-id-here",
        "LINKEDIN_CLIENT_SECRET": "paste-your-linkedin-client-secret-here",
        "LINKEDIN_REDIRECT_URI": "http://127.0.0.1:33333/linkedin/oauth/callback",
        "LINKEDIN_VERSION": "202607"
      }
    }
  }
}

LINKEDIN_VERSION defaults to 202607, matching LinkedIn Marketing API versioning guidance current at the time this project was created.

OAuth Flow

  1. In your LinkedIn developer app, add this authorized redirect URL:
http://127.0.0.1:33333/linkedin/oauth/callback
  1. Add the MCP server to OpenWorker with LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET, and LINKEDIN_REDIRECT_URI.
  2. Ask OpenWorker to run linkedin_start_oauth_flow.
  3. The MCP starts a localhost callback server, opens your browser to LinkedIn, validates the returned state, exchanges the authorization code, and stores the token at:
~/.linkedin-mcp-openworker/token.json
  1. After that, LinkedIn tools automatically use the stored token. Use linkedin_auth_status to inspect token status and linkedin_logout to delete it.

The default managed flow uses LinkedIn's regular 3-legged OAuth authorization endpoint:

https://www.linkedin.com/oauth/v2/authorization

That is the endpoint LinkedIn documents for OpenID Connect. It requests openid profile email w_member_social by default, exchanges the authorization code with your client_secret, and stores the returned access token and ID token metadata locally. Do not use auth_method: "pkce" with OpenID scopes; LinkedIn rejects that combination with Open ID permission is not supported for PKCE flows.

LinkedIn's general 3-legged OAuth documentation says redirect URLs should be HTTPS. If LinkedIn rejects the localhost callback URL for your app, use an HTTPS callback/tunnel URL that forwards to this machine and set LINKEDIN_REDIRECT_URI to the exact URL registered in the LinkedIn Developer Portal.

By default, OAuth tools redact tokens in tool results. Pass return_access_token: true only when you explicitly want a result to include token values.

Notes

LinkedIn API access depends on the products approved for your developer app. A token without w_member_social cannot publish member posts, and organization posts require organization permissions plus an authenticated member with the right page role.