Skip to content

Commit 43d9196

Browse files
Merge pull request #4 from vertexcover-io/refactor/remove-relative-imports
Refact: Rename project and minor changes
2 parents b881940 + d3ce989 commit 43d9196

23 files changed

+526
-695
lines changed

.github/workflows/release.yml

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*.*.*"
7+
8+
permissions:
9+
contents: write
10+
pull-requests: write
11+
12+
jobs:
13+
release:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@v4
18+
with:
19+
fetch-depth: 0
20+
21+
- name: Install uv
22+
uses: astral-sh/setup-uv@v3
23+
24+
- name: Extract tag version
25+
id: tag_version
26+
run: |
27+
echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
28+
29+
- name: Build package
30+
run: uv build
31+
32+
- name: Generate changelog
33+
id: changelog
34+
uses: mikepenz/release-changelog-builder-action@v4
35+
with:
36+
configuration: ".github/changelog_config.json"
37+
toTag: ${{ github.ref_name }}
38+
token: ${{ secrets.GITHUB_TOKEN }}
39+
40+
- name: Update CHANGELOG.md
41+
run: |
42+
# Create new changelog entry
43+
echo "## [${{ github.ref_name }}] - $(date +%Y-%m-%d)" > temp_changelog.md
44+
echo "" >> temp_changelog.md
45+
echo "${{ steps.changelog.outputs.changelog }}" >> temp_changelog.md
46+
echo "" >> temp_changelog.md
47+
48+
# Prepend new entry to existing changelog (after header)
49+
head -n 7 CHANGELOG.md > new_changelog.md
50+
cat temp_changelog.md >> new_changelog.md
51+
tail -n +8 CHANGELOG.md >> new_changelog.md
52+
mv new_changelog.md CHANGELOG.md
53+
rm temp_changelog.md
54+
55+
- name: Commit updated CHANGELOG.md
56+
run: |
57+
git config --local user.email "action@github.com"
58+
git config --local user.name "GitHub Action"
59+
git stash push -m "temp changelog changes"
60+
git checkout main
61+
git stash pop
62+
git add CHANGELOG.md
63+
git commit -m "chore: update CHANGELOG.md for ${{ github.ref_name }}" || exit 0
64+
git push origin main
65+
66+
- name: Create GitHub Release
67+
uses: softprops/action-gh-release@v2
68+
with:
69+
tag_name: ${{ github.ref_name }}
70+
name: Release ${{ steps.tag_version.outputs.VERSION }}
71+
body: ${{ steps.changelog.outputs.changelog }}
72+
files: |
73+
dist/*
74+
draft: false
75+
prerelease: false
76+
env:
77+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
78+
79+
- name: Publish to PyPI
80+
env:
81+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
82+
run: uv publish

CONTRIBUTING.md

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Contributing to `linkedin-mcp`
1+
# Contributing to `linkedin-spider`
22

33
Contributions are welcome, and they are greatly appreciated!
44
Every little bit helps, and credit will always be given.
@@ -9,7 +9,7 @@ You can contribute in many ways:
99

1010
## Report Bugs
1111

12-
Report bugs at https://github.com/amankumarsingh77/linkedin-mcp/issues
12+
Report bugs at https://github.com/vertexcover-io/linkedin-spider/issues
1313

1414
If you are reporting a bug, please include:
1515

@@ -29,11 +29,11 @@ Anything tagged with "enhancement" and "help wanted" is open to whoever wants to
2929

3030
## Write Documentation
3131

32-
linkedin-mcp could always use more documentation, whether as part of the official docs, in docstrings, or even on the web in blog posts, articles, and such.
32+
linkedin-spider could always use more documentation, whether as part of the official docs, in docstrings, or even on the web in blog posts, articles, and such.
3333

3434
## Submit Feedback
3535

36-
The best way to send feedback is to file an issue at https://github.com/amankumarsingh77/linkedin-mcp/issues.
36+
The best way to send feedback is to file an issue at https://github.com/vertexcover-io/linkedin-spider/issues.
3737

3838
If you are proposing a new feature:
3939

@@ -44,22 +44,22 @@ If you are proposing a new feature:
4444

4545
# Get Started!
4646

47-
Ready to contribute? Here's how to set up `linkedin-mcp` for local development.
47+
Ready to contribute? Here's how to set up `linkedin-spider` for local development.
4848
Please note this documentation assumes you already have `uv` and `Git` installed and ready to go.
4949

50-
1. Fork the `linkedin-mcp` repo on GitHub.
50+
1. Fork the `linkedin-spider` repo on GitHub.
5151

5252
2. Clone your fork locally:
5353

5454
```bash
5555
cd <directory_in_which_repo_should_be_created>
56-
git clone git@github.com:YOUR_NAME/linkedin-mcp.git
56+
git clone git@github.com:vertexcover-io/linkedin-spider.git
5757
```
5858

5959
3. Now we need to install the environment. Navigate into the directory
6060

6161
```bash
62-
cd linkedin-mcp
62+
cd linkedin-spider
6363
```
6464

6565
Then, install and activate the environment with:
@@ -68,23 +68,37 @@ Then, install and activate the environment with:
6868
uv sync
6969
```
7070

71-
4. Install pre-commit to run linters/formatters at commit time:
71+
4. Set up environment variables for authentication. Create a `.env` file in the project root:
72+
73+
```bash
74+
cp .env.example .env
75+
# Edit .env with your LinkedIn credentials
76+
```
77+
78+
**Example .env file:**
79+
```env
80+
LINKEDIN_EMAIL=your_email@example.com
81+
LINKEDIN_PASSWORD=your_password
82+
HEADLESS=true
83+
```
84+
85+
5. Install pre-commit to run linters/formatters at commit time:
7286

7387
```bash
7488
uv run pre-commit install
7589
```
7690

77-
5. Create a branch for local development:
91+
6. Create a branch for local development:
7892

7993
```bash
8094
git checkout -b name-of-your-bugfix-or-feature
8195
```
8296

8397
Now you can make your changes locally.
8498

85-
6. Don't forget to add test cases for your added functionality to the `tests` directory.
99+
7. Don't forget to add test cases for your added functionality to the `tests` directory.
86100

87-
7. When you're done making changes, check that your changes pass the formatting tests.
101+
8. When you're done making changes, check that your changes pass the formatting tests.
88102

89103
```bash
90104
make check
@@ -96,15 +110,15 @@ Now, validate that all unit tests are passing:
96110
make test
97111
```
98112

99-
9. Before raising a pull request you should also run tox.
100-
This will run the tests across different versions of Python:
113+
9. (Optional) For additional validation, you can run the MCP server locally to test your changes:
101114

102115
```bash
103-
tox
104-
```
116+
# Test the CLI
117+
make run-cli
105118

106-
This requires you to have multiple versions of python installed.
107-
This step is also triggered in the CI/CD pipeline, so you could also choose to skip this step locally.
119+
# Test the MCP server
120+
make run-mcp
121+
```
108122

109123
10. Commit your changes and push your branch to GitHub:
110124

@@ -116,6 +130,21 @@ git push origin name-of-your-bugfix-or-feature
116130

117131
11. Submit a pull request through the GitHub website.
118132

133+
## Available Make Commands
134+
135+
For your convenience, here are the available make commands:
136+
137+
```bash
138+
make help # Show all available commands
139+
make install # Install dev dependencies and pre-commit hooks
140+
make check # Run code quality tools (linting, type checking)
141+
make test # Run tests with pytest
142+
make build # Build wheel file
143+
make clean # Clean build artifacts and cache
144+
make run-cli # Run LinkedIn spider CLI
145+
make run-mcp # Run LinkedIn spider MCP server
146+
```
147+
119148
# Pull Request Guidelines
120149

121150
Before you submit a pull request, check that it meets these guidelines:

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ clean-build:
2727

2828
.PHONY: run-cli
2929
run-cli:
30-
@uv run linkedin_scraper_cli
30+
@uv run linkedin-spider-cli
3131

3232
.PHONY: run-mcp
3333
run-mcp:
34-
@uv run linkedin_scraper_mcp
34+
@uv run linkedin-spider-mcp
3535

3636
.PHONY: dev-install
3737
dev-install: install

README.md

Lines changed: 19 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# linkedin-scraper-mcp
1+
# linkedin-spider
22

3-
Effortless LinkedIn scraping with zero detection. Extract, export, and automate your LinkedIn data.
3+
Effortless Linkedin scraping with zero detection. Extract, export, and automate your Linkedin data.
44

55

66
## Features
77

8-
- Search LinkedIn profiles with advanced filters (location, connection type, current company, position)
8+
- Search Linkedin profiles with advanced filters (location, connection type, current company, position)
99
- Extract complete profile information (experience, education, skills, contact details)
1010
- Get company details and information
1111
- Retrieve incoming and outgoing connection requests
@@ -19,14 +19,14 @@ Effortless LinkedIn scraping with zero detection. Extract, export, and automate
1919

2020
```bash
2121
# Clone the repo
22-
github.com/vertexcover-io/linkedin-mcp-py
23-
cd linkedin-mcp-py
22+
github.com/vertexcover-io/linkedin-spider
23+
cd linkedin-spider
2424
# Install with uv
2525
uv sync
2626
```
2727

2828
> [!NOTE]
29-
> **Authentication Update:** LinkedIn has enhanced their anti-bot mechanisms, temporarily affecting cookie-based authentication. We recommend using the email/password authentication method for reliable access. We are actively working on restoring full cookie authentication support.
29+
> **Authentication Update:** Linkedin has enhanced their anti-bot mechanisms, temporarily affecting cookie-based authentication. We recommend using the email/password authentication method for reliable access. We are actively working on restoring full cookie authentication support.
3030
3131
## Different ways to use it
3232

@@ -35,15 +35,15 @@ uv sync
3535
Perfect for integration into your existing Python applications:
3636

3737
```python
38-
from linkedin_scraper import LinkedInScraper, ScraperConfig
38+
from linkedin_scraper import LinkedinSpider, ScraperConfig
3939

4040
config = ScraperConfig(headless=True, page_load_timeout=30)
4141
```
4242

4343
```python
4444
# Authenticate (use either email/password or cookie).
4545
# Authentication is mostly done once and the session is saved in the chrome profile
46-
scraper = LinkedInScraper(
46+
scraper = LinkedinSpider(
4747
email="your_email@example.com",
4848
password="your_password",
4949
config=config
@@ -138,9 +138,9 @@ For more examples : [examples](./examples)
138138
Great for quick data extraction and scripting:
139139

140140
```bash
141-
uv run linkedin_scraper_cli search -q "product manager" -n 10 -o results.json
142-
uv run linkedin_scraper_cli profile -u "https://linkedin.com/in/johndoe" -o profile.json
143-
uv run linkedin_scraper_cli company -u "https://linkedin.com/company/openai" -o company.json
141+
uv run linkedin-spider-cli search -q "product manager" -n 10 -o results.json
142+
uv run linkedin-spider-cli profile -u "https://linkedin.com/in/johndoe" -o profile.json
143+
uv run linkedin-spider-cli company -u "https://linkedin.com/company/openai" -o company.json
144144
```
145145

146146
### 3. MCP Server
@@ -182,7 +182,7 @@ TRANSPORT=sse uv run linkedin_mcp
182182

183183
```bash
184184
# Add to Claude Code
185-
claude mcp add linkedin-scraper --transport sse <server-url>
185+
claude mcp add linkedin-spider --transport sse <server-url>
186186
# Example server URL format: http://localhost:8080/sse
187187
```
188188

@@ -208,7 +208,7 @@ Then add this to your Claude Desktop configuration:
208208
```json
209209
{
210210
"mcpServers": {
211-
"linkedin-scraper": {
211+
"linkedin-spider": {
212212
"command": "docker",
213213
"args": [
214214
"run", "--rm", "-i",
@@ -223,32 +223,6 @@ Then add this to your Claude Desktop configuration:
223223
}
224224
```
225225

226-
##### Option 2: Direct Installation (Alternative)
227-
228-
If you prefer not to use Docker, you can install directly:
229-
230-
```bash
231-
# Install globally
232-
uv tool install --editable .
233-
```
234-
235-
Then configure Claude Desktop:
236-
```json
237-
{
238-
"mcpServers": {
239-
"linkedin-scraper": {
240-
"command": "linkedin-mcp",
241-
"args": ["stdio"],
242-
"env": {
243-
"LINKEDIN_EMAIL": "your_email@example.com",
244-
"LINKEDIN_PASSWORD": "your_password",
245-
"HEADLESS": "true"
246-
}
247-
}
248-
}
249-
}
250-
```
251-
252226

253227

254228
## Docker Development & Testing
@@ -282,22 +256,22 @@ docker run --rm -i -e TRANSPORT=stdio --env-file .env linkedin-mcp
282256

283257
## Authentication Methods
284258

285-
### Method 1: LinkedIn Cookie
259+
### Method 1: Linkedin Cookie
286260

287-
1. Login to LinkedIn in your browser
261+
1. Login to Linkedin in your browser
288262
2. Open Developer Tools (F12)
289263
3. Go to Application/Storage → Cookies → linkedin.com
290264
4. Copy the `li_at` cookie value
291265
5. Use it in your code:
292266

293267
```python
294-
scraper = LinkedInScraper(li_at_cookie="your_cookie_value")
268+
scraper = LinkedinSpider(li_at_cookie="your_cookie_value")
295269
```
296270

297271
### Method 2: Email & Password (Recommended)
298272

299273
```python
300-
scraper = LinkedInScraper(
274+
scraper = LinkedinSpider(
301275
email="your_email@example.com",
302276
password="your_password"
303277
)
@@ -315,11 +289,11 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
315289

316290
This tool is for personal use only. Please:
317291

318-
- Respect LinkedIn's Terms of Service
292+
- Respect Linkedin's Terms of Service
319293
- Use reasonable rate limits
320294
- Don't spam or harass users
321295
- Be responsible with the data you collect
322296

323297
---
324298

325-
**Ready to extract LinkedIn data like a pro?** Star this repo and start scraping!
299+
**Ready to extract Linkedin data like a pro?** Star this repo and start scraping!

0 commit comments

Comments
 (0)