flashid-auto 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flashid-auto might be problematic. Click here for more details.
- flashid_auto-0.2.0/.env.example +7 -0
- flashid_auto-0.2.0/LICENSE +21 -0
- flashid_auto-0.2.0/MANIFEST.in +14 -0
- flashid_auto-0.2.0/PKG-INFO +130 -0
- flashid_auto-0.2.0/docs/examples/linkedin-mcp-client.json +11 -0
- flashid_auto-0.2.0/docs/examples/linkedin-mcp-server.template.json +45 -0
- flashid_auto-0.2.0/docs/flashid-api-reference.md +9518 -0
- flashid_auto-0.2.0/docs/linkedin-mcp-release.md +136 -0
- flashid_auto-0.2.0/docs/linkedin-mcp.md +194 -0
- flashid_auto-0.2.0/docs/linkedin-people-search.md +133 -0
- flashid_auto-0.2.0/docs/linkedin-sales-navigator.md +221 -0
- flashid_auto-0.2.0/docs/package-readme.md +105 -0
- flashid_auto-0.2.0/pyproject.toml +44 -0
- flashid_auto-0.2.0/requirements-dev.lock +24 -0
- flashid_auto-0.2.0/requirements-mcp.lock +39 -0
- flashid_auto-0.2.0/setup.cfg +4 -0
- flashid_auto-0.2.0/src/flashid_auto/__init__.py +1 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/__init__.py +13 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/base.py +128 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/contracts.py +71 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/environment.py +39 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/plan.py +167 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/registry.py +109 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/runner.py +427 -0
- flashid_auto-0.2.0/src/flashid_auto/automation/worker.py +107 -0
- flashid_auto-0.2.0/src/flashid_auto/cli.py +146 -0
- flashid_auto-0.2.0/src/flashid_auto/flashid/__init__.py +25 -0
- flashid_auto-0.2.0/src/flashid_auto/flashid/__main__.py +51 -0
- flashid_auto-0.2.0/src/flashid_auto/flashid/client.py +382 -0
- flashid_auto-0.2.0/src/flashid_auto/flashid/config.py +73 -0
- flashid_auto-0.2.0/src/flashid_auto/flashid/errors.py +74 -0
- flashid_auto-0.2.0/src/flashid_auto/mcp/__init__.py +1 -0
- flashid_auto-0.2.0/src/flashid_auto/mcp/__main__.py +57 -0
- flashid_auto-0.2.0/src/flashid_auto/mcp/server.py +54 -0
- flashid_auto-0.2.0/src/flashid_auto/mcp/service.py +150 -0
- flashid_auto-0.2.0/src/flashid_auto/mcp/tools.py +175 -0
- flashid_auto-0.2.0/src/flashid_auto/modules/__init__.py +1 -0
- flashid_auto-0.2.0/src/flashid_auto/modules/_linkedin.py +29 -0
- flashid_auto-0.2.0/src/flashid_auto/modules/duckduckgo.py +221 -0
- flashid_auto-0.2.0/src/flashid_auto/modules/linkedin_people_search.py +567 -0
- flashid_auto-0.2.0/src/flashid_auto/modules/linkedin_sales_navigator.py +912 -0
- flashid_auto-0.2.0/src/flashid_auto/tocsv.py +109 -0
- flashid_auto-0.2.0/src/flashid_auto.egg-info/PKG-INFO +130 -0
- flashid_auto-0.2.0/src/flashid_auto.egg-info/SOURCES.txt +54 -0
- flashid_auto-0.2.0/src/flashid_auto.egg-info/dependency_links.txt +1 -0
- flashid_auto-0.2.0/src/flashid_auto.egg-info/entry_points.txt +5 -0
- flashid_auto-0.2.0/src/flashid_auto.egg-info/requires.txt +17 -0
- flashid_auto-0.2.0/src/flashid_auto.egg-info/top_level.txt +1 -0
- flashid_auto-0.2.0/tests/test_automation.py +1364 -0
- flashid_auto-0.2.0/tests/test_automation_worker.py +190 -0
- flashid_auto-0.2.0/tests/test_duckduckgo_browser.py +150 -0
- flashid_auto-0.2.0/tests/test_flashid_client.py +339 -0
- flashid_auto-0.2.0/tests/test_flashid_config_cli.py +116 -0
- flashid_auto-0.2.0/tests/test_linkedin_mcp.py +321 -0
- flashid_auto-0.2.0/tests/test_linkedin_people_search.py +586 -0
- flashid_auto-0.2.0/tests/test_linkedin_sales_navigator.py +856 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 flashid-auto contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include .env.example
|
|
3
|
+
include requirements-dev.lock
|
|
4
|
+
include requirements-mcp.lock
|
|
5
|
+
include docs/package-readme.md
|
|
6
|
+
include docs/linkedin-mcp.md
|
|
7
|
+
include docs/linkedin-mcp-release.md
|
|
8
|
+
include docs/linkedin-sales-navigator.md
|
|
9
|
+
include docs/linkedin-people-search.md
|
|
10
|
+
include docs/flashid-api-reference.md
|
|
11
|
+
include docs/examples/linkedin-mcp-client.json
|
|
12
|
+
include docs/examples/linkedin-mcp-server.template.json
|
|
13
|
+
recursive-include tests *.py
|
|
14
|
+
global-exclude __pycache__ *.py[cod] .env
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: flashid-auto
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Modular automation for running FlashID browsers
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Keywords: mcp,linkedin,sales-navigator,flashid,automation
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: requests<3,>=2.32.3
|
|
11
|
+
Requires-Dist: python-dotenv<2,>=1.0.1
|
|
12
|
+
Requires-Dist: playwright<2,>=1.51
|
|
13
|
+
Requires-Dist: jsonschema<5,>=4.23
|
|
14
|
+
Provides-Extra: dev
|
|
15
|
+
Requires-Dist: pytest<9,>=8.3; extra == "dev"
|
|
16
|
+
Requires-Dist: requests-mock<2,>=1.12; extra == "dev"
|
|
17
|
+
Requires-Dist: ruff<1,>=0.11; extra == "dev"
|
|
18
|
+
Provides-Extra: mcp
|
|
19
|
+
Requires-Dist: mcp<3,>=2.3; extra == "mcp"
|
|
20
|
+
Requires-Dist: filelock<4,>=3.18; extra == "mcp"
|
|
21
|
+
Provides-Extra: release
|
|
22
|
+
Requires-Dist: build<2,>=1.2; extra == "release"
|
|
23
|
+
Requires-Dist: twine<8,>=6; extra == "release"
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# LinkedIn MCP for FlashID
|
|
27
|
+
|
|
28
|
+
Search LinkedIn Sales Navigator companies and employees from a natural-language
|
|
29
|
+
request in any MCP-compatible agent. The agent interprets your request and calls
|
|
30
|
+
five structured tools in your existing FlashID browser.
|
|
31
|
+
|
|
32
|
+
The MCP server and executable are named **linkedin-mcp**. The Python distribution
|
|
33
|
+
is **flashid-auto**; the unrelated `linkedin-mcp` package on PyPI is not this project.
|
|
34
|
+
|
|
35
|
+
## Install from source
|
|
36
|
+
|
|
37
|
+
Requires Python 3.10+, FlashID with Local API enabled, and a running browser
|
|
38
|
+
environment signed in to LinkedIn Sales Navigator (English interface).
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
python -m venv .venv
|
|
42
|
+
.venv/bin/python -m pip install '.[mcp]'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
On Windows, use `.venv\Scripts\python.exe` and `.venv\Scripts\linkedin-mcp.exe`.
|
|
46
|
+
Playwright connects to FlashID's existing browser; no separate Chromium download
|
|
47
|
+
is needed for actual searches.
|
|
48
|
+
|
|
49
|
+
Copy `.env.example` to `.env` and fill in your FlashID API address and key.
|
|
50
|
+
Keep your real `.env` private. Configuration can also be supplied as process
|
|
51
|
+
environment variables. The MCP server does not require a separate LLM API key.
|
|
52
|
+
|
|
53
|
+
## Connect an agent
|
|
54
|
+
|
|
55
|
+
### Codex: one-command setup after PyPI publication
|
|
56
|
+
|
|
57
|
+
With Codex CLI and uv (`uvx`) already installed, register the server:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
codex mcp add linkedin-mcp --env FLASHID_API_KEY=YOUR_FLASHID_API_KEY -- uvx --from 'flashid-auto[mcp]==0.2.0' linkedin-mcp --profile Navigator
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Replace the placeholder with your own FlashID API key. Codex saves the launch
|
|
64
|
+
configuration; `uvx` installs and caches the package when Codex first connects.
|
|
65
|
+
The default FlashID API address is `http://127.0.0.1:58931`. If needed, add
|
|
66
|
+
`--env FLASHID_API_BASE_URL=http://your-host:port` before `--`.
|
|
67
|
+
FlashID and the named browser environment must already be running and signed in.
|
|
68
|
+
No source checkout, manual virtual environment, or JSON editing is needed.
|
|
69
|
+
|
|
70
|
+
This command downloads version 0.2.0 from PyPI. For an unpublished build, use the
|
|
71
|
+
source installation instructions above. Check configured servers with
|
|
72
|
+
`codex mcp list`, then use `/mcp` inside Codex to inspect the connection.
|
|
73
|
+
|
|
74
|
+
See the [official Codex MCP documentation](https://developers.openai.com/codex/mcp/).
|
|
75
|
+
|
|
76
|
+
### Other MCP clients or installation from source
|
|
77
|
+
|
|
78
|
+
Use absolute paths in your MCP client's configuration:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"mcpServers": {
|
|
83
|
+
"linkedin-mcp": {
|
|
84
|
+
"command": "/absolute/path/to/project/.venv/bin/linkedin-mcp",
|
|
85
|
+
"args": [
|
|
86
|
+
"--env-file", "/absolute/path/to/project/.env",
|
|
87
|
+
"--profile", "Navigator"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Start FlashID and the named browser environment, sign in to Sales Navigator,
|
|
95
|
+
then connect your agent. Each user supplies their own FlashID environment and
|
|
96
|
+
LinkedIn session. The package shares the tools, not an account or browser session.
|
|
97
|
+
|
|
98
|
+
Example requests:
|
|
99
|
+
|
|
100
|
+
- “Find up to 10 companies headquartered in the United States related to substations.”
|
|
101
|
+
- “Find procurement managers at this company.”
|
|
102
|
+
- “Find five matching companies, then up to three purchasing contacts at each.”
|
|
103
|
+
|
|
104
|
+
The agent can use `check_environment`, `inspect_company_filters`,
|
|
105
|
+
`search_companies`, `inspect_people_filters`, and `search_people`.
|
|
106
|
+
For a company-specific people search, it must supply both the verified company
|
|
107
|
+
name and ID; discovery returns company IDs where the page exposes them.
|
|
108
|
+
|
|
109
|
+
The server reads visible pages, creates temporary tabs, and cleans up its tabs.
|
|
110
|
+
It preserves existing user tabs. It returns actual filters, counts and completion
|
|
111
|
+
status, including valid partial results on failure. It stops for login or manual
|
|
112
|
+
verification challenges. It does not save accounts, send messages, or write CRM data.
|
|
113
|
+
|
|
114
|
+
The default module timeout is 300 seconds and the default per-page operation
|
|
115
|
+
timeout is 15 seconds. Search calls sharing an environment run sequentially;
|
|
116
|
+
overlapping MCP calls return `ENV_BUSY`.
|
|
117
|
+
|
|
118
|
+
## Install a published release
|
|
119
|
+
|
|
120
|
+
The distribution name is `flashid-auto`. Do not install the unrelated
|
|
121
|
+
`linkedin-mcp` distribution as a substitute. To install version 0.2.0 from PyPI:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
python -m pip install 'flashid-auto[mcp]==0.2.0'
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The source tree contains the full Chinese integration guide at
|
|
128
|
+
`docs/linkedin-mcp.md` and the release procedure at `docs/linkedin-mcp-release.md`.
|
|
129
|
+
|
|
130
|
+
License: MIT. This project is independent of LinkedIn and FlashID.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.replace-owner/linkedin-mcp",
|
|
4
|
+
"title": "LinkedIn MCP for FlashID",
|
|
5
|
+
"description": "Search LinkedIn Sales Navigator companies and employees in your own FlashID browser.",
|
|
6
|
+
"version": "0.2.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"url": "https://github.com/replace-owner/replace-repository",
|
|
9
|
+
"source": "github"
|
|
10
|
+
},
|
|
11
|
+
"packages": [
|
|
12
|
+
{
|
|
13
|
+
"registryType": "pypi",
|
|
14
|
+
"registryBaseUrl": "https://pypi.org",
|
|
15
|
+
"identifier": "flashid-auto",
|
|
16
|
+
"version": "0.2.0",
|
|
17
|
+
"runtimeHint": "uvx",
|
|
18
|
+
"runtimeArguments": [
|
|
19
|
+
{"type":"named","name":"--with","value":"flashid-auto[mcp]==0.2.0"}
|
|
20
|
+
],
|
|
21
|
+
"packageArguments": [{"type":"positional","value":"mcp"}],
|
|
22
|
+
"transport": {"type":"stdio"},
|
|
23
|
+
"environmentVariables": [
|
|
24
|
+
{
|
|
25
|
+
"name":"FLASHID_API_BASE_URL",
|
|
26
|
+
"description":"Your FlashID Local API origin",
|
|
27
|
+
"default":"http://127.0.0.1:58931",
|
|
28
|
+
"isRequired":true
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name":"FLASHID_API_KEY",
|
|
32
|
+
"description":"Your own FlashID Local API key",
|
|
33
|
+
"isRequired":true,
|
|
34
|
+
"isSecret":true
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name":"LINKEDIN_MCP_PROFILE",
|
|
38
|
+
"description":"Name of your running FlashID environment",
|
|
39
|
+
"default":"Navigator",
|
|
40
|
+
"isRequired":true
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|