linear-mcp-fast 0.2.0__tar.gz → 0.2.2__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.
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/PKG-INFO +1 -1
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/pyproject.toml +1 -1
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast/reader.py +5 -2
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast/server.py +6 -8
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/PKG-INFO +1 -1
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/README.md +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/setup.cfg +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast/__init__.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast/__main__.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast/store_detector.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/SOURCES.txt +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/dependency_links.txt +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/entry_points.txt +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/requires.txt +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/top_level.txt +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/__init__.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_cache.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_filesystem.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_history.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_indexeddb.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_localstorage.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_notifications.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_profile_folder.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_sessionstorage.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_chromium_snss2.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/ccl_shared_proto_db_downloads.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/common.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/download_common.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/profile_folder_protocols.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/serialization_formats/__init__.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/serialization_formats/ccl_blink_value_deserializer.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/serialization_formats/ccl_easy_chromium_pickle.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/serialization_formats/ccl_protobuff.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/serialization_formats/ccl_v8_value_deserializer.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/storage_formats/__init__.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/ccl_chromium_reader/storage_formats/ccl_leveldb.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/tools_and_utilities/Chromium_dump_local_storage.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/tools_and_utilities/Chromium_dump_session_storage.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/tools_and_utilities/benchmark.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/tools_and_utilities/ccl_chrome_audit.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/tools_and_utilities/dump_indexeddb_details.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_chromium_reader/tools_and_utilities/dump_leveldb.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_simplesnappy/ccl_simplesnappy/__init__.py +0 -0
- {linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_simplesnappy/ccl_simplesnappy/ccl_simplesnappy.py +0 -0
|
@@ -75,10 +75,13 @@ class LinearLocalReader:
|
|
|
75
75
|
def _find_linear_db(
|
|
76
76
|
self, wrapper: ccl_chromium_indexeddb.WrappedIndexDB
|
|
77
77
|
) -> ccl_chromium_indexeddb.WrappedDatabase:
|
|
78
|
-
"""Find the main Linear database."""
|
|
78
|
+
"""Find the main Linear database with data."""
|
|
79
79
|
for db_id in wrapper.database_ids:
|
|
80
80
|
if "linear_" in db_id.name and db_id.name != "linear_databases":
|
|
81
|
-
|
|
81
|
+
db = wrapper[db_id.name, db_id.origin]
|
|
82
|
+
# Skip empty databases
|
|
83
|
+
if list(db.object_store_names):
|
|
84
|
+
return db
|
|
82
85
|
raise ValueError("Could not find Linear database in IndexedDB")
|
|
83
86
|
|
|
84
87
|
def _to_str(self, val: Any) -> str:
|
|
@@ -37,7 +37,7 @@ def list_issues(
|
|
|
37
37
|
team: str | None = None,
|
|
38
38
|
state_type: str | None = None,
|
|
39
39
|
priority: int | None = None,
|
|
40
|
-
limit: int =
|
|
40
|
+
limit: int | None = None,
|
|
41
41
|
) -> dict[str, Any]:
|
|
42
42
|
"""
|
|
43
43
|
List issues from local cache with optional filters.
|
|
@@ -47,13 +47,12 @@ def list_issues(
|
|
|
47
47
|
team: Filter by team key (e.g., 'UK')
|
|
48
48
|
state_type: Filter by state type (started, unstarted, completed, canceled, backlog)
|
|
49
49
|
priority: Filter by priority (1=Urgent, 2=High, 3=Medium, 4=Low)
|
|
50
|
-
limit: Maximum number of issues (default
|
|
50
|
+
limit: Maximum number of issues (default: all)
|
|
51
51
|
|
|
52
52
|
Returns:
|
|
53
53
|
Dictionary with issues array and totalCount
|
|
54
54
|
"""
|
|
55
55
|
reader = get_reader()
|
|
56
|
-
limit = min(limit, 100)
|
|
57
56
|
|
|
58
57
|
assignee_id = None
|
|
59
58
|
if assignee:
|
|
@@ -89,7 +88,7 @@ def list_issues(
|
|
|
89
88
|
filtered.append(issue)
|
|
90
89
|
|
|
91
90
|
total_count = len(filtered)
|
|
92
|
-
page = filtered[:limit]
|
|
91
|
+
page = filtered[:limit] if limit else filtered
|
|
93
92
|
|
|
94
93
|
results = []
|
|
95
94
|
for issue in page:
|
|
@@ -155,7 +154,7 @@ def get_issue(identifier: str) -> dict[str, Any] | None:
|
|
|
155
154
|
def list_my_issues(
|
|
156
155
|
name: str,
|
|
157
156
|
state_type: str | None = None,
|
|
158
|
-
limit: int =
|
|
157
|
+
limit: int | None = None,
|
|
159
158
|
) -> dict[str, Any]:
|
|
160
159
|
"""
|
|
161
160
|
List issues assigned to a user.
|
|
@@ -163,13 +162,12 @@ def list_my_issues(
|
|
|
163
162
|
Args:
|
|
164
163
|
name: User name to search for
|
|
165
164
|
state_type: Optional filter (started, unstarted, completed, canceled, backlog)
|
|
166
|
-
limit: Maximum issues (default
|
|
165
|
+
limit: Maximum issues (default: all)
|
|
167
166
|
|
|
168
167
|
Returns:
|
|
169
168
|
User info with their issues
|
|
170
169
|
"""
|
|
171
170
|
reader = get_reader()
|
|
172
|
-
limit = min(limit, 100)
|
|
173
171
|
|
|
174
172
|
user = reader.find_user(name)
|
|
175
173
|
if not user:
|
|
@@ -191,7 +189,7 @@ def list_my_issues(
|
|
|
191
189
|
if reader.get_state_type(i.get("stateId", "")) == state_type
|
|
192
190
|
]
|
|
193
191
|
|
|
194
|
-
page = all_issues[:limit]
|
|
192
|
+
page = all_issues[:limit] if limit else all_issues
|
|
195
193
|
|
|
196
194
|
results = []
|
|
197
195
|
for issue in page:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/src/linear_mcp_fast.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{linear_mcp_fast-0.2.0 → linear_mcp_fast-0.2.2}/vendor/ccl_simplesnappy/ccl_simplesnappy/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|