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.

Files changed (56) hide show
  1. flashid_auto-0.2.0/.env.example +7 -0
  2. flashid_auto-0.2.0/LICENSE +21 -0
  3. flashid_auto-0.2.0/MANIFEST.in +14 -0
  4. flashid_auto-0.2.0/PKG-INFO +130 -0
  5. flashid_auto-0.2.0/docs/examples/linkedin-mcp-client.json +11 -0
  6. flashid_auto-0.2.0/docs/examples/linkedin-mcp-server.template.json +45 -0
  7. flashid_auto-0.2.0/docs/flashid-api-reference.md +9518 -0
  8. flashid_auto-0.2.0/docs/linkedin-mcp-release.md +136 -0
  9. flashid_auto-0.2.0/docs/linkedin-mcp.md +194 -0
  10. flashid_auto-0.2.0/docs/linkedin-people-search.md +133 -0
  11. flashid_auto-0.2.0/docs/linkedin-sales-navigator.md +221 -0
  12. flashid_auto-0.2.0/docs/package-readme.md +105 -0
  13. flashid_auto-0.2.0/pyproject.toml +44 -0
  14. flashid_auto-0.2.0/requirements-dev.lock +24 -0
  15. flashid_auto-0.2.0/requirements-mcp.lock +39 -0
  16. flashid_auto-0.2.0/setup.cfg +4 -0
  17. flashid_auto-0.2.0/src/flashid_auto/__init__.py +1 -0
  18. flashid_auto-0.2.0/src/flashid_auto/automation/__init__.py +13 -0
  19. flashid_auto-0.2.0/src/flashid_auto/automation/base.py +128 -0
  20. flashid_auto-0.2.0/src/flashid_auto/automation/contracts.py +71 -0
  21. flashid_auto-0.2.0/src/flashid_auto/automation/environment.py +39 -0
  22. flashid_auto-0.2.0/src/flashid_auto/automation/plan.py +167 -0
  23. flashid_auto-0.2.0/src/flashid_auto/automation/registry.py +109 -0
  24. flashid_auto-0.2.0/src/flashid_auto/automation/runner.py +427 -0
  25. flashid_auto-0.2.0/src/flashid_auto/automation/worker.py +107 -0
  26. flashid_auto-0.2.0/src/flashid_auto/cli.py +146 -0
  27. flashid_auto-0.2.0/src/flashid_auto/flashid/__init__.py +25 -0
  28. flashid_auto-0.2.0/src/flashid_auto/flashid/__main__.py +51 -0
  29. flashid_auto-0.2.0/src/flashid_auto/flashid/client.py +382 -0
  30. flashid_auto-0.2.0/src/flashid_auto/flashid/config.py +73 -0
  31. flashid_auto-0.2.0/src/flashid_auto/flashid/errors.py +74 -0
  32. flashid_auto-0.2.0/src/flashid_auto/mcp/__init__.py +1 -0
  33. flashid_auto-0.2.0/src/flashid_auto/mcp/__main__.py +57 -0
  34. flashid_auto-0.2.0/src/flashid_auto/mcp/server.py +54 -0
  35. flashid_auto-0.2.0/src/flashid_auto/mcp/service.py +150 -0
  36. flashid_auto-0.2.0/src/flashid_auto/mcp/tools.py +175 -0
  37. flashid_auto-0.2.0/src/flashid_auto/modules/__init__.py +1 -0
  38. flashid_auto-0.2.0/src/flashid_auto/modules/_linkedin.py +29 -0
  39. flashid_auto-0.2.0/src/flashid_auto/modules/duckduckgo.py +221 -0
  40. flashid_auto-0.2.0/src/flashid_auto/modules/linkedin_people_search.py +567 -0
  41. flashid_auto-0.2.0/src/flashid_auto/modules/linkedin_sales_navigator.py +912 -0
  42. flashid_auto-0.2.0/src/flashid_auto/tocsv.py +109 -0
  43. flashid_auto-0.2.0/src/flashid_auto.egg-info/PKG-INFO +130 -0
  44. flashid_auto-0.2.0/src/flashid_auto.egg-info/SOURCES.txt +54 -0
  45. flashid_auto-0.2.0/src/flashid_auto.egg-info/dependency_links.txt +1 -0
  46. flashid_auto-0.2.0/src/flashid_auto.egg-info/entry_points.txt +5 -0
  47. flashid_auto-0.2.0/src/flashid_auto.egg-info/requires.txt +17 -0
  48. flashid_auto-0.2.0/src/flashid_auto.egg-info/top_level.txt +1 -0
  49. flashid_auto-0.2.0/tests/test_automation.py +1364 -0
  50. flashid_auto-0.2.0/tests/test_automation_worker.py +190 -0
  51. flashid_auto-0.2.0/tests/test_duckduckgo_browser.py +150 -0
  52. flashid_auto-0.2.0/tests/test_flashid_client.py +339 -0
  53. flashid_auto-0.2.0/tests/test_flashid_config_cli.py +116 -0
  54. flashid_auto-0.2.0/tests/test_linkedin_mcp.py +321 -0
  55. flashid_auto-0.2.0/tests/test_linkedin_people_search.py +586 -0
  56. flashid_auto-0.2.0/tests/test_linkedin_sales_navigator.py +856 -0
@@ -0,0 +1,7 @@
1
+ FLASHID_API_BASE_URL=http://127.0.0.1:58931
2
+ FLASHID_API_KEY=
3
+ FLASHID_CONNECT_TIMEOUT=5
4
+ FLASHID_READ_TIMEOUT=30
5
+ FLASHID_BROWSER_TIMEOUT=180
6
+ FLASHID_PROXY_TIMEOUT=65
7
+ LINKEDIN_MCP_PROFILE=Navigator
@@ -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,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "linkedin-mcp": {
4
+ "command": "/absolute/path/to/flashid-auto/.venv/bin/linkedin-mcp",
5
+ "args": [
6
+ "--env-file", "/absolute/path/to/flashid-auto/.env",
7
+ "--profile", "Navigator"
8
+ ]
9
+ }
10
+ }
11
+ }
@@ -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
+ }