Skip to main content
Glama
yo-its-anas

linkedin-copilot-chatgpt

by yo-its-anas

LinkedIn Copilot for ChatGPT

Your AI-powered LinkedIn content, engagement and growth agent — built natively for ChatGPT.

Built and maintained by Muhammad Anas

LinkedIn Profile · GitHub Repository · Available Skills · Installation

Install once. Start with a draft. Keep working in the same chat.

"Write a post about my latest DevOps project."

"Make it sound more like me."

"Turn it into a carousel and plan the rest of my week."

LinkedIn Copilot brings reusable skills and an optional connected app together in ChatGPT. You describe the outcome; Copilot picks the relevant workflow. Connect LinkedIn when you need supported account data or actions, and review external writes through ChatGPT's permissions.

Using ChatGPT web? Start with Web setup. If search shows "No plugins match", this project has not been published to the directory yet. Pushing this repository does not create a public ChatGPT listing.

Where you use ChatGPT

Supported route

Web with a skills-upload option under Create

Build the web bundle and follow the displayed upload/install flow

Web with an MCP URL form under Create

Connect a deployed Copilot MCP endpoint; a GitHub URL is not an MCP endpoint

Web workspace with admin import

Import the repository marketplace and enable the plugin for your role

Public web directory

Submit the plugin, obtain approval, then publish it

Desktop local Work

Add the repository marketplace through the plugin creator

The web skills bundle contains all twelve workflows and no server configuration. The skills can use an already connected LinkedIn tool when it supports the requested operation. Copilot's own MCP tools require its separately hosted app and OAuth. Connecting a search-only LinkedIn plugin does not add post analytics.

Using your connected LinkedIn

Copilot now checks tools already available in the chat before asking for a separate connection. If a connected tool can read your posts and metrics, the audit skill can use it. A people-search tool cannot fetch private post analytics, regardless of how many writing skills are installed.

For hosts that install a repository as one local skill, the root SKILL.md now provides a single Copilot entry point with all twelve workflows. The native plugin continues to expose the twelve individual skills. Loading workflow instructions does not require compiling TypeScript or starting the MCP server. Downloaded vs active skills, and connector troubleshooting.

Related MCP server: LinkedIn MCP Server

Overview

LinkedIn Copilot transforms ChatGPT into a connected LinkedIn assistant for content, engagement and growth workflows. It helps you analyze your presence, improve your writing, plan what to publish and use supported LinkedIn actions through an OAuth-connected MCP server.

Drafting and analysis work with material you supply. Live account access depends on the official APIs and permissions available to your LinkedIn developer application. This repository contains the implementation and deployment structure; it is not an already hosted service or an approved Plugin Directory listing.

Why I Built This

I built this ChatGPT-native redesign to bring LinkedIn writing, planning and engagement into one conversational workflow. I wanted to move from an idea to a useful draft, review the result and take a supported action without losing the context behind it.

My interests in DevOps, cloud infrastructure and software engineering shape how I approach AI-powered engineering workflows and agentic systems. Useful agents need more than prompts: they need clear permissions, reliable integrations, testable behavior and a practical path to deployment. LinkedIn Copilot is my application of those principles to a focused, everyday workflow.

Muhammad Anas

Features

  • Analyze your LinkedIn presence: assess supplied profile content and identify focused improvements.

  • Audit posts and performance: use supplied posts and metrics, or authorized API data when available.

  • Generate high-quality posts: develop hooks and complete drafts grounded in your experience and voice.

  • Create weekly content strategies: organize themes, angles, posting plans and engagement priorities.

  • Humanize AI-generated writing: improve clarity, specificity and rhythm with optional editorial helpers.

  • Create carousel content: outline slides and copy; rendered artifacts depend on available rendering tools.

  • Repurpose long-form content: turn articles, notes and transcripts into distinct LinkedIn ideas.

  • Draft comments and replies: contribute relevant observations and respond in context.

  • Manage engagement workflows: prioritize responses and prepare follow-up drafts.

  • Analyze inbox conversations: triage conversations you paste or supply; live inbox access is not implemented.

  • Perform supported actions: publish text posts, comment, reply or delete your own posts when API access and all authorization requirements are satisfied.

Installed skills are managed by ChatGPT, not stored by this app in ChatGPT memory. Saved preferences are separate from skill instructions. The packaged user-profile/ files are blank templates, and the humanizer's style heuristics are not an AI-authorship detector.

Architecture

flowchart TD
    A[ChatGPT] --> B[LinkedIn Copilot Skills]
    B --> C[Intent Router]
    C --> D[MCP Tool Layer]
    D --> E[User Approval]
    E --> F[LinkedIn API]

ChatGPT interprets the request and applies the appropriate skills. The intent router coordinates workflows; the MCP server handles OAuth, tool schemas, permissions and official API calls. The approval step represents ChatGPT's host-controlled review for external actions. Drafting and reading have their own appropriate permission requirements.

The server uses TypeScript, Node.js 24, the official MCP SDK and Express. OAuth credentials and user context are stored in encrypted SQLite. Provider tokens stay on the server and are never returned to the model. Write receipts help prevent duplicate actions. The server does not require an OpenAI API key.

See the detailed architecture and migration guide.

Available Skills

Skill

Purpose

linkedin-post

Generate hooks and a complete post draft

linkedin-plan

Build a weekly content and engagement plan

linkedin-audit

Analyze content and available performance evidence

linkedin-profile

Apply a 100-point profile rubric to supplied content

linkedin-humanize

Edit for natural, specific writing

linkedin-carousel

Develop a slide sequence and carousel copy

linkedin-repurpose

Extract reusable angles from long-form material

linkedin-comment

Draft specific, useful comments

linkedin-reply

Triage comments and prepare replies

linkedin-dm

Draft outbound messages for manual sending

linkedin-inbox

Analyze and triage supplied conversations

linkedin-router

Coordinate natural-language, multi-skill requests

Example Conversations

"What skills does LinkedIn Copilot have?"

Copilot explains its eleven focused workflows and router. If its MCP app is available, the public guide reports configured tools; an account check establishes which live requests may be possible. This does not claim that every configured feature has been authorized.

“Write a LinkedIn post about what I learned deploying a Kubernetes application. Ask me for the details you need.”

“Here are my last 20 posts and their metrics. Audit what worked and plan next week.”

“Rewrite this draft in my voice. Keep the technical details and remove generic claims.”

“Turn this article into a seven-slide LinkedIn carousel.”

“Here are three inbox conversations. Prioritize them and draft thoughtful replies.”

“Publish this exact final draft with public visibility.”

The final request uses an external write tool only if the connected account has the required capabilities and ChatGPT's approval requirements are satisfied. Asking to write a draft does not authorize publishing.

LinkedIn Integration

The MCP server connects through OAuth to official LinkedIn APIs. Start with Sign In with LinkedIn using OpenID Connect and openid profile for basic connected identity. Additional features require their own products, scopes and, where applicable, LinkedIn approval.

  1. Create a LinkedIn developer app and store its credentials server-side.

  2. Register https://YOUR-HOST/oauth/linkedin/callback as the LinkedIn callback.

  3. Configure a separate OAuth client for ChatGPT, using the exact callback displayed by its app setup.

  4. Enable only LinkedIn scopes your developer application actually holds.

  5. Reconnect after changing requested permissions and test each enabled capability.

Publishing has an additional identity requirement. This implementation resolves a verified Person ID through /v2/me with an existing r_liteprofile or approved r_basicprofile grant. It does not assume an OIDC subject is a Person ID. A new self-service OIDC + Share app may therefore be unable to publish with this implementation, even with w_member_social.

Full historical reads, analytics and comments require separate grants. There is no live personal inbox, DM sending, profile editing, arbitrary profile search, media upload or scheduled publishing implementation. Those skills use supplied material and prepare drafts for manual use.

User Approval & Safety

External LinkedIn actions execute only when all four conditions hold:

  1. LinkedIn officially exposes the required API.

  2. The user has authenticated.

  3. The required permissions and scopes are available.

  4. ChatGPT's approval requirements are satisfied.

Skills present the exact content, target and visibility for review. ChatGPT controls approval prompts; tool annotations are not proof of approval. The server independently enforces account identity, scopes, input validation and ownership checks. It does not accept a model-generated approved: true flag as authorization.

OAuth uses state, CSRF protection and PKCE on the ChatGPT-to-server flow. Credentials are encrypted at rest, and repeated action IDs return stored receipts. Uncertain write outcomes block automatic retries pending reconciliation.

Disconnecting deletes local credentials and preferences and invalidates broker access. Removing provider authorization is a separate action in LinkedIn's Permitted Services. Read Security and Permissions.

Installation

ChatGPT web

Build the dedicated skills bundle:

npm ci --ignore-scripts
npm run package:web

The ZIP appears at release/web-*/linkedin-copilot-chatgpt.zip. If Plugins > Create offers skill or plugin uploads, follow that flow. If it asks for an MCP server URL, it is the connection path and cannot accept a repository URL or skill ZIP.

For public discoverability, use the OpenAI plugin portal, choose Create plugin > Skills only, and upload the bundle. Public search requires approval and publication; a portal draft alone is not a public listing. Official submission guide.

Web setup and prepared listing copy explain the remaining account-side steps. The package has not yet been installed or validated in your web account.

ChatGPT Work / desktop

In local desktop Work with the built-in plugin creator, use:

@plugin-creator Add yo-its-anas/linkedin-copilot-chatgpt as a plugin marketplace
and help me install LinkedIn Copilot for ChatGPT.

This desktop setup prompt does not publish a web plugin. Where the Codex CLI is available, the equivalent marketplace command is:

codex plugin marketplace add yo-its-anas/linkedin-copilot-chatgpt --ref main

Then install LinkedIn Copilot for ChatGPT from that source in the desktop plugin browser and open a new chat. The install prompt requires an available installer and host confirmation. Official marketplace setup.

ChatGPT workspace

An admin can import this repository through Admin > Plugins > Add > Import marketplace, using the repository URL, an empty Path and main as the branch. Members install the imported plugin once it is made available to their role. Importing a catalog does not connect anyone's LinkedIn account. Official workspace import.

Optional connected actions

The maintainer deploys the included MCP server and registers it as an app. Users then connect that Copilot app through OAuth. The registered app can expose the workflow library and supported action tools in the same conversation; private actions retain their authentication and permission checks.

Build the default skills bundle or map an existing registered app:

npm run package:plugin
npm run package:plugin -- --app-id asdk_app_YOUR_ID

Use the actual app ID, not its plugin listing ID. The packager also accepts a plugin_asdk_app_... listing ID and normalizes it to asdk_app_.... Registered-app bundles avoid duplicate bundled MCP declarations. A raw --url bundle is available for desktop development.

See the complete installation guide for the operator steps and current hosting prerequisites. The generated ZIP is under release/ and excludes credentials, databases, dependencies and caches.

Local Development

Contributors and self-hosting operators need Node.js 24.x and npm:

git clone https://github.com/yo-its-anas/linkedin-copilot-chatgpt.git
cd linkedin-copilot-chatgpt
npm ci --ignore-scripts

Copy the example environment file. In PowerShell:

Copy-Item .env.example .env
node -e "console.log(require('node:crypto').randomBytes(32).toString('base64'))"

Run the random-value command twice: use independent values for ENCRYPTION_KEY and MCP_CLIENT_SECRET. Fill in your LinkedIn credentials and the exact ChatGPT OAuth callback. The LinkedIn client secret and MCP client secret are separate credentials.

npm run dev

GET /health checks the process, /ready checks storage and POST /mcp serves stateless Streamable HTTP. OAuth discovery is exposed at /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource. Anonymous discovery is supported; private tool calls require account linking. GET and DELETE /mcp return 405.

ChatGPT needs a reachable HTTPS endpoint. When using a tunnel or reverse proxy, update PUBLIC_URL, ALLOWED_ORIGINS and the LinkedIn callback to the public origin. Preserve the public Host header.

Deployment

Set production environment values and provide HTTPS through a reverse proxy, then run:

docker compose up --build -d

The container runs as a non-root user and persists encrypted SQLite on a named volume. The host port binds to loopback. Use one process and one replica; horizontal scaling requires shared transactional storage and distributed coordination.

Production candidate packaging requires the real endpoint, registered app ID, publisher and public policy URLs:

npm run package:plugin -- --production --url https://YOUR-HOST/mcp --app-id asdk_app_YOUR_ID --publisher "Muhammad Anas" --website https://YOUR-HOST --privacy https://YOUR-HOST/privacy --terms https://YOUR-HOST/terms

Replace these illustrative values with your deployed service details. Packaging creates a review candidate; it does not deploy, submit or publish the app. Live OAuth, LinkedIn grants and ChatGPT approval behavior must be validated before release. See deployment operations.

Environment Variables

Variable

Purpose

NODE_ENV

development locally; production when deployed

PORT

HTTP port; example uses 3000

PUBLIC_URL

Externally reachable server origin

DATABASE_PATH

Persistent SQLite path

ENCRYPTION_KEY

Base64-encoded random 32-byte encryption key

MCP_CLIENT_ID

Preconfigured ChatGPT OAuth client identifier

MCP_CLIENT_SECRET

Independent random broker client secret, at least 32 characters

MCP_REDIRECT_URIS

Comma-separated exact allowed ChatGPT OAuth callbacks

LINKEDIN_CLIENT_ID

LinkedIn developer app client ID

LINKEDIN_CLIENT_SECRET

LinkedIn developer app client secret

LINKEDIN_SCOPES

Granted provider scopes; baseline openid profile

LINKEDIN_API_VERSION

Configured REST API version; example uses 202608

ALLOWED_ORIGINS

Comma-separated allowed request origins

Use .env.example as the reference. Never commit .env, tokens or encryption keys. Configuration cannot grant permissions that LinkedIn has not approved.

Testing

Automated checks also cover public workflow access, rejection of arbitrary file paths, and skills-only, registered-app and desktop MCP packages.

npm run check
python -m unittest discover -s tests -p "test_*.py"

The checks compile TypeScript, run automated tests and validate plugin packaging. Tests cover OAuth, scopes, encrypted storage, tenant isolation, write receipts, ownership, MCP transport and routing. Python tests cover optional writing helpers. LinkedIn responses are mocked; these tests do not publish posts or establish live API approval.

For account-specific OAuth and host approval checks, follow the live testing guide. The deterministic routing helper is a regression aid; actual ChatGPT skill selection also needs testing in the host.

API Compatibility Matrix

Two public MCP tools support onboarding without LinkedIn login: linkedin_get_copilot_guide explains the product and configured tool catalog; linkedin_get_workflow supplies canonical workflow instructions and reference data. ChatGPT uses those instructions to draft in the current chat. These tools do not install skills or perform external actions.

Capability

Required access

Implementation

Basic connected profile

openid profile

Supported

Own post history and text

r_member_social, closed to new grants

Conditional

Read comments

r_member_social_feed

Conditional

Own post metrics

r_member_postAnalytics

Conditional

Publish/delete own text posts

w_member_social and verified Person ID

Conditional; deletion verifies ownership

Comment and reply

w_member_social_feed and verified Person ID

Conditional

Saved writing preferences

Authenticated app context permissions

Supported

Full profile audit

User-supplied profile content

Analysis and suggested edits

Personal inbox and DMs

User-supplied conversations

Triage and drafts; no live read/send

Media upload, reactions, scheduling

No implemented adapter

Unavailable

Broker scopes (linkedin:read, linkedin:write, context:write) apply in addition to provider grants. See the full API compatibility matrix for endpoint details, official sources, version assumptions and product restrictions.

Roadmap

  • Validate OAuth and approved capabilities against a designated live LinkedIn app.

  • Expand real ChatGPT skill-selection and approval evaluations.

  • Improve carousel artifact generation with available rendering tools.

  • Add shared storage and distributed coordination before supporting multiple replicas.

  • Evaluate additional official API capabilities only where access and permissions permit.

  • Prepare public deployment, support resources and directory submission evidence.

These are planned improvements, not currently available services or promised API access.

Contributing

Issues and pull requests are welcome in the repository. Describe the problem, expected behavior and relevant API access without including account credentials or private messages.

Keep changes focused, preserve attribution and run the checks above. Integration changes should reference official LinkedIn documentation and include meaningful permission and failure-path tests. Document any new environment settings or deployment requirements.

License

Licensed under the MIT License. Portions derived from the upstream project retain:

Copyright (c) 2026 Jake Schincariol

The ChatGPT-native redesign and additional work are documented as:

Modifications and additional work Copyright (c) 2026 Muhammad Anas

Both notices and the MIT permission notice must remain with applicable copies and substantial portions.

Author

Muhammad Anas

DevOps Engineer | Cloud & AI Automation | Agentic Systems

Creator and maintainer of the ChatGPT-native redesign.

LinkedIn:
https://www.linkedin.com/in/muhammad-anas-a35b1a334/

GitHub:
yo-its-anas · linkedin-copilot-chatgpt

If you find the project useful, consider starring the repository.

Credits

LinkedIn Copilot for ChatGPT is a substantial ChatGPT-native redesign and extension of the open-source linkedin-agent-skill project originally created by Jake Schincariol.

The redesigned project introduces ChatGPT-native skill orchestration, MCP architecture, OAuth-based LinkedIn connectivity, permission-aware actions, expanded documentation, testing and production deployment structure.

The upstream hook catalog, profile rubric, writing frameworks and humanizer methods form part of this project's foundation. Jake Schincariol's original copyright notice is retained under the MIT License.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers