sift-cli 1.0.0__tar.gz → 1.0.1__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.
- {sift_cli-1.0.0 → sift_cli-1.0.1}/PKG-INFO +30 -6
- {sift_cli-1.0.0 → sift_cli-1.0.1}/README.md +29 -5
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/00-PLAN.md +1 -0
- sift_cli-1.0.1/notlar/28-KURULUM.md +92 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/pyproject.toml +1 -1
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/__init__.py +1 -1
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/server.py +5 -2
- sift_cli-1.0.1/tanitim/00-PLAN.md +146 -0
- sift_cli-1.0.1/tanitim/ARASTIRMA.md +139 -0
- sift_cli-1.0.1/tanitim/T1-SURUM-1-0-1.md +50 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/mutations.py +1 -1
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_server.py +2 -1
- {sift_cli-1.0.0 → sift_cli-1.0.1}/.gitattributes +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/.github/workflows/ci.yml +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/.github/workflows/release.yml +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/.gitignore +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/LICENSE +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/01-YAKALAMA.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/02-MODEL-KOPRUSU.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/03-DAMITMA.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/04-GUVENLIK-AGI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/05-DIL-BAGIMSIZLIGI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/06-DOSYA-TASLAGI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/07-MCP-SUNUCUSU.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/08-BUTCE-VE-OLCUM.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/09-ARKA-PLAN-KOMUTLARI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/10-GIZLILIK.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/11-YAYIN.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/12-CAGIRANIN-SOZ-HAKKI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/13-DOSYA-DAMITMA.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/14-ARAYAN-PEEK.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/15-COKLU-IS.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/16-HAFIZA.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/17-YOGUN-ARACLAR.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/18-KAPSAM.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/19-KALINTI-MUTASYON.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/20-KAYIT-BIRIMI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/21-SAKLAMA.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/22-YANIT-ONBELLEGI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/23-OLCUM-BIRIMI.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/24-ANAHTAR.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/25-TEKLIF.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/26-BEKLEMEK.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/notlar/27-WINDOWS.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/answers.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/background.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/capture.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/cli.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/digest.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/distill.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/fallback.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/hook.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/lines.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/many.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/memory.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/model.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/outline.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/peek.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/privacy.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/records.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/store.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/tools.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/view.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/src/sift/watch.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/budget.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/conftest.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/README.md +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/ansi-progress.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/ansi-progress.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/cargo-de.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/cargo-de.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/cmake-vi.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/cmake-vi.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/cobol-mainframe.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/cobol-mainframe.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/docker-ar.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/docker-ar.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/dotnet-fr.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/dotnet-fr.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/ffmpeg-fa.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/ffmpeg-fa.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/gcc-ru.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/gcc-ru.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/git-quiet.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/git-quiet.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/gotest-zh.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/gotest-zh.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/gradle-ko.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/gradle-ko.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/journalctl-it.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/journalctl-it.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/kubectl-hi.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/kubectl-hi.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/latex-pl.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/latex-pl.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/maven-tr.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/maven-tr.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/mix-he.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/mix-he.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/psql-es.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/psql-es.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/pytest-en.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/pytest-en.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/rspec-id.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/rspec-id.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/terraform-pt.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/terraform-pt.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/vite-ja.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/vite-ja.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/zig-sw.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus/zig-sw.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/clojure-rapor.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/clojure-rapor.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/cpp-baslik.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/cpp-baslik.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/elixir-onbellek.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/elixir-onbellek.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/go-kuyruk.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/go-kuyruk.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/haskell-ayristirici.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/haskell-ayristirici.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/hcl-altyapi.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/hcl-altyapi.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/java-depo.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/java-depo.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/makefile-yapi.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/makefile-yapi.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/python-akis.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/python-akis.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/qqzz-uydurma.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/qqzz-uydurma.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/ruby-fatura.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/ruby-fatura.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/rust-matris.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/rust-matris.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/shell-dagitim.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/shell-dagitim.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/sql-sema.json +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus-kaynak/sql-sema.txt +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/korpus_reader.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/languages.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/outlines.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_answers.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_background.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_capture.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_cli.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_digest.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_distill.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_fallback.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_gc.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_hook.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_hook_setup.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_kaynak.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_korpus.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_lines.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_many.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_model.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_outline.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_package.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_privacy.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_records.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_setup.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/test_tokens.py +0 -0
- {sift_cli-1.0.0 → sift_cli-1.0.1}/test/wire.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sift-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: Runs your command, then gives the model only the lines that matter.
|
|
5
5
|
Project-URL: Homepage, https://github.com/slymnysr/sift
|
|
6
6
|
Author: slmnys
|
|
@@ -20,6 +20,8 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
|
|
21
21
|
# sift
|
|
22
22
|
|
|
23
|
+
<!-- mcp-name: io.github.slymnysr/sift -->
|
|
24
|
+
|
|
23
25
|
Runs your command, then gives the model only the lines that matter.
|
|
24
26
|
|
|
25
27
|
A test suite prints 4,000 lines and eleven of them are the failure. A build
|
|
@@ -243,11 +245,17 @@ result is re-sent on every turn that follows it, so a build log kept out of a
|
|
|
243
245
|
transcript goes on staying out of it.
|
|
244
246
|
|
|
245
247
|
```bash
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
claude mcp add sift -- sift-mcp
|
|
248
|
+
uv tool install "sift-cli[mcp]" # or pipx; see Installing
|
|
249
|
+
claude mcp add --scope user sift -- sift-mcp
|
|
249
250
|
```
|
|
250
251
|
|
|
252
|
+
The key is read from `~/.config/nvidia/api_key`, so it does not have to be in
|
|
253
|
+
the environment and does not have to be pasted anywhere. `--scope user` puts the
|
|
254
|
+
server in every project rather than the one you happen to be in.
|
|
255
|
+
|
|
256
|
+
Then **restart the client**. MCP servers are connected when a session starts, so
|
|
257
|
+
the session you ran that command in will not see this one.
|
|
258
|
+
|
|
251
259
|
Without a key the server starts and every tool that would need a model declines
|
|
252
260
|
with an explanation, so the agent falls back to its own shell rather than being
|
|
253
261
|
handed a worse answer it cannot tell apart from a good one.
|
|
@@ -265,10 +273,26 @@ the lines or none could be reached.
|
|
|
265
273
|
## Installing
|
|
266
274
|
|
|
267
275
|
```bash
|
|
268
|
-
|
|
269
|
-
|
|
276
|
+
uv tool install sift-cli # the command line, no dependencies at all
|
|
277
|
+
uv tool install "sift-cli[mcp]" # and the MCP server
|
|
270
278
|
```
|
|
271
279
|
|
|
280
|
+
`pipx install` does the same thing. Either puts `sift` and `sift-mcp` on your
|
|
281
|
+
PATH in an environment of their own, which is what you want for a command-line
|
|
282
|
+
tool: nothing here belongs in the Python you build with.
|
|
283
|
+
|
|
284
|
+
Plain `pip install sift-cli` works inside a virtualenv you have already
|
|
285
|
+
activated. It does **not** work against the system Python on Debian, Ubuntu, or
|
|
286
|
+
WSL — those ship a `EXTERNALLY-MANAGED` marker and pip refuses, by design:
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
error: externally-managed-environment
|
|
290
|
+
× This environment is externally managed
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
That refusal is right and the answer is not `--break-system-packages`. Use `uv
|
|
294
|
+
tool` or `pipx`.
|
|
295
|
+
|
|
272
296
|
The package is `sift-cli` and the commands are `sift` and `sift-mcp`. The names
|
|
273
297
|
differ because `sift-mcp` on PyPI belongs to somebody else's project — an
|
|
274
298
|
unrelated MCP server about authorising agent actions. Nothing here is theirs and
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# sift
|
|
2
2
|
|
|
3
|
+
<!-- mcp-name: io.github.slymnysr/sift -->
|
|
4
|
+
|
|
3
5
|
Runs your command, then gives the model only the lines that matter.
|
|
4
6
|
|
|
5
7
|
A test suite prints 4,000 lines and eleven of them are the failure. A build
|
|
@@ -223,11 +225,17 @@ result is re-sent on every turn that follows it, so a build log kept out of a
|
|
|
223
225
|
transcript goes on staying out of it.
|
|
224
226
|
|
|
225
227
|
```bash
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
claude mcp add sift -- sift-mcp
|
|
228
|
+
uv tool install "sift-cli[mcp]" # or pipx; see Installing
|
|
229
|
+
claude mcp add --scope user sift -- sift-mcp
|
|
229
230
|
```
|
|
230
231
|
|
|
232
|
+
The key is read from `~/.config/nvidia/api_key`, so it does not have to be in
|
|
233
|
+
the environment and does not have to be pasted anywhere. `--scope user` puts the
|
|
234
|
+
server in every project rather than the one you happen to be in.
|
|
235
|
+
|
|
236
|
+
Then **restart the client**. MCP servers are connected when a session starts, so
|
|
237
|
+
the session you ran that command in will not see this one.
|
|
238
|
+
|
|
231
239
|
Without a key the server starts and every tool that would need a model declines
|
|
232
240
|
with an explanation, so the agent falls back to its own shell rather than being
|
|
233
241
|
handed a worse answer it cannot tell apart from a good one.
|
|
@@ -245,10 +253,26 @@ the lines or none could be reached.
|
|
|
245
253
|
## Installing
|
|
246
254
|
|
|
247
255
|
```bash
|
|
248
|
-
|
|
249
|
-
|
|
256
|
+
uv tool install sift-cli # the command line, no dependencies at all
|
|
257
|
+
uv tool install "sift-cli[mcp]" # and the MCP server
|
|
250
258
|
```
|
|
251
259
|
|
|
260
|
+
`pipx install` does the same thing. Either puts `sift` and `sift-mcp` on your
|
|
261
|
+
PATH in an environment of their own, which is what you want for a command-line
|
|
262
|
+
tool: nothing here belongs in the Python you build with.
|
|
263
|
+
|
|
264
|
+
Plain `pip install sift-cli` works inside a virtualenv you have already
|
|
265
|
+
activated. It does **not** work against the system Python on Debian, Ubuntu, or
|
|
266
|
+
WSL — those ship a `EXTERNALLY-MANAGED` marker and pip refuses, by design:
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
error: externally-managed-environment
|
|
270
|
+
× This environment is externally managed
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
That refusal is right and the answer is not `--break-system-packages`. Use `uv
|
|
274
|
+
tool` or `pipx`.
|
|
275
|
+
|
|
252
276
|
The package is `sift-cli` and the commands are `sift` and `sift-mcp`. The names
|
|
253
277
|
differ because `sift-mcp` on PyPI belongs to somebody else's project — an
|
|
254
278
|
unrelated MCP server about authorising agent actions. Nothing here is theirs and
|
|
@@ -76,6 +76,7 @@ sonraki faza geçilmez.
|
|
|
76
76
|
| 25 | Teklif | en çok kazandıran parça kendini tanıtsın; başkasının ayar dosyasına güvenle yazsın | bitti — [25-TEKLIF.md](25-TEKLIF.md) |
|
|
77
77
|
| 26 | Beklemek | cevap vermeyecek basamağı beklemeyi bırak; merdiveni ölçüme göre kur | bitti — [26-BEKLEMEK.md](26-BEKLEMEK.md) |
|
|
78
78
|
| 27 | Windows | CI'ın gösterdiği iki gerçek hata: `alive()` süreç öldürüyordu, izolasyon `~`'ı bulamıyordu | bitti — [27-WINDOWS.md](27-WINDOWS.md) |
|
|
79
|
+
| 28 | Kurulum | yabancının izlediği yol sınandı; `pip install` Debian/WSL'de reddediliyor | bitti — [28-KURULUM.md](28-KURULUM.md) |
|
|
79
80
|
|
|
80
81
|
## Ek fazlar — neden sonradan çıktılar
|
|
81
82
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# 28 — Kurulum: bir yabancının izlediği yol
|
|
2
|
+
|
|
3
|
+
**Nereden çıktı:** Kullanıcı "dışarıdan biriymişim gibi kur" dedi. Ben de
|
|
4
|
+
hafızamdaki bilgiyi kullanmadan, yalnız **yayınlanmış belgelere** bakarak
|
|
5
|
+
kurdum. Amaç bir rol yapmak değildi; sınanan şey şuydu: *yayınladığımız
|
|
6
|
+
belgeler, bir yabancının doğru kurması için yeterli mi?*
|
|
7
|
+
|
|
8
|
+
Cevap: neredeyse. Bir yerde takılıyordu.
|
|
9
|
+
|
|
10
|
+
## Bulunan hata: `pip install` bu makinelerde çalışmıyor
|
|
11
|
+
|
|
12
|
+
README şunu diyordu:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pip install "sift-cli[mcp]"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Debian, Ubuntu ve WSL'de bu komut **başarısız olur**. O sistemler sistem
|
|
19
|
+
Python'una bir işaret koyar:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/usr/lib/python3.12/EXTERNALLY-MANAGED
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
ve `pip` PEP 668 gereği reddeder:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
error: externally-managed-environment
|
|
29
|
+
× This environment is externally managed
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Bu ret **doğrudur** — sistem paket yöneticisinin kurduğu Python'a pip ile
|
|
33
|
+
yazmak dağıtımı bozar. Yanlış olan, README'nin çalışmayan bir komut vermesiydi.
|
|
34
|
+
|
|
35
|
+
Ve cevap `--break-system-packages` değil. Bir komut satırı aracı zaten kendi
|
|
36
|
+
ortamında olmalı: `uv tool install` ya da `pipx install`. İkisi de `sift` ve
|
|
37
|
+
`sift-mcp`'yi PATH'e koyar, hiçbir şeye bulaşmadan.
|
|
38
|
+
|
|
39
|
+
README düzeltildi.
|
|
40
|
+
|
|
41
|
+
## Kodda da aynı cümle var — ve bekliyor
|
|
42
|
+
|
|
43
|
+
`src/sift/server.py`, `mcp` eklentisi olmadan çalıştırılınca şunu basıyor:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
sift-mcp: the server half needs one more package.
|
|
47
|
+
|
|
48
|
+
pip install "sift-cli[mcp]"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Aynı hata, aynı sebep.** Bir Ubuntu kullanıcısı bu mesajı okuyup komutu
|
|
52
|
+
çalıştırırsa yine reddedilir — ve bu sefer aracın kendi ağzından yanlış bir
|
|
53
|
+
tavsiye almış olur, ki README'den daha kötüdür.
|
|
54
|
+
|
|
55
|
+
**Neden hemen düzeltilmedi:** README GitHub'da anında güncellenir; koddaki
|
|
56
|
+
mesaj **paketin içinde ships**, yani düzeltmek yeni bir PyPI sürümü gerektirir
|
|
57
|
+
(`1.0.1`, yeni tag, yeni yayın). Bu yüzden bekleyen iş olarak buraya yazıldı.
|
|
58
|
+
|
|
59
|
+
**Bir sonraki sürümde yapılacak:**
|
|
60
|
+
|
|
61
|
+
- `src/sift/server.py` → `NO_MCP` mesajındaki `pip install "sift-cli[mcp]"`
|
|
62
|
+
satırı `uv tool install "sift-cli[mcp]"` olacak, ve altına *"or `pipx`; plain
|
|
63
|
+
`pip` is refused by Debian/Ubuntu/WSL"* notu düşülecek
|
|
64
|
+
- `test/test_server.py` → `test_and_the_test_above_would_have_noticed` o dizgeyi
|
|
65
|
+
arıyor, birlikte güncellenecek
|
|
66
|
+
- `test/mutations.py` → aynı dizgeyi çapa olarak kullanan mutasyon var
|
|
67
|
+
|
|
68
|
+
Üçü aynı cümleye bağlı; biri değişirse üçü de değişmeli.
|
|
69
|
+
|
|
70
|
+
**Yapıldı — 9 Eylül 2026, sürüm 1.0.1** (`tanitim/T1-SURUM-1-0-1.md`).
|
|
71
|
+
|
|
72
|
+
## Kurulumun geri kalanı çalıştı
|
|
73
|
+
|
|
74
|
+
| adım | sonuç |
|
|
75
|
+
|---|---|
|
|
76
|
+
| `uv tool install "sift-cli[mcp]"` | `sift` ve `sift-mcp` PATH'te |
|
|
77
|
+
| Anahtar (`~/.config/nvidia/api_key`) | Kendiliğinden bulundu |
|
|
78
|
+
| `claude mcp add --scope user sift -- sift-mcp` | `✔ Connected` |
|
|
79
|
+
| İstemci gibi konuşma | 7 araç listelendi, 120 satır → 6 satır |
|
|
80
|
+
|
|
81
|
+
## İki not, ikisi de kullanıcı deneyimi hakkında
|
|
82
|
+
|
|
83
|
+
**PyPI sayfası okunamıyor.** Bir asistan `pypi.org/project/sift-cli/` adresini
|
|
84
|
+
çekmeye çalışınca JavaScript hatası alıyor. İkinci hamle README'nin ham hâli
|
|
85
|
+
oluyor ve o çalışıyor. Yani **README, PyPI açıklaması değil, gerçek giriş
|
|
86
|
+
kapısı** — orada eksik olan hiçbir yerde telafi edilmiyor.
|
|
87
|
+
|
|
88
|
+
**Döngüyü asistan kapatamıyor.** İki adım insan gerektiriyor: NVIDIA anahtarını
|
|
89
|
+
almak (tarayıcıda kayıt, OAuth akışı yok) ve istemciyi yeniden başlatmak (MCP
|
|
90
|
+
sunucuları yalnız oturum açılışında bağlanır). Kurulumun tamamı otomatikleşemez,
|
|
91
|
+
ve bu bir kusur değil — ama tanıtımda bunun yazılması gerekir, yoksa "iki
|
|
92
|
+
komutla kurulur" diyen her metin yanlış olur.
|
|
@@ -29,14 +29,17 @@ import time
|
|
|
29
29
|
try:
|
|
30
30
|
from mcp.server.mcpserver import MCPServer
|
|
31
31
|
except ImportError as exc:
|
|
32
|
-
# A sentence, not a stack. `
|
|
32
|
+
# A sentence, not a stack. Installing `sift-cli` brings nothing with it on
|
|
33
33
|
# purpose -- somebody who wants the command line should not be made to carry
|
|
34
34
|
# a protocol library for it -- so arriving here is an ordinary thing to do
|
|
35
35
|
# wrong, and the client that started this shows whatever comes out of it.
|
|
36
36
|
raise SystemExit(
|
|
37
37
|
"sift-mcp: the server half needs one more package.\n"
|
|
38
38
|
"\n"
|
|
39
|
-
'
|
|
39
|
+
' uv tool install "sift-cli[mcp]"\n'
|
|
40
|
+
"\n"
|
|
41
|
+
"(or pipx. Plain `pip` is refused by Debian, Ubuntu and WSL, which\n"
|
|
42
|
+
"protect the system Python -- and they are right to.)\n"
|
|
40
43
|
"\n"
|
|
41
44
|
"The command line (`sift`) is already installed and works without it."
|
|
42
45
|
) from exc
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# İŞ 1 — Popülerlik planı
|
|
2
|
+
|
|
3
|
+
## Sorun, olduğu gibi
|
|
4
|
+
|
|
5
|
+
`sift-cli` 8 Eylül 2026'da yayınlandı. Bugün itibarıyla:
|
|
6
|
+
|
|
7
|
+
| kanal | durum |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Modelin eğitim verisi | Paket bir günlük. **Hiçbir model bilmiyor, bilemez** |
|
|
10
|
+
| GitHub | **0 yıldız, 0 topic** |
|
|
11
|
+
| PyPI | Yayında, ama adıyla aranmadıkça bulunmaz |
|
|
12
|
+
| Resmî MCP kayıt defteri | **Kayıtlı değil** |
|
|
13
|
+
| Dizinler (mcp.so, Glama, PulseMCP, Smithery) | Hiçbirinde yok |
|
|
14
|
+
| awesome-mcp-servers | Yok |
|
|
15
|
+
|
|
16
|
+
**Keşfedilebilirlik sıfır.** Bu bir kod sorunu değil; kod çalışıyor, 639 test
|
|
17
|
+
yeşil, üç platformda CI geçiyor. Sorun dağıtım.
|
|
18
|
+
|
|
19
|
+
## Ölçüt
|
|
20
|
+
|
|
21
|
+
Bu işin başarısı yıldız sayısıyla değil, **bir yabancının sift'e ulaşabileceği
|
|
22
|
+
yolların sayısıyla** ölçülür. Bugün sıfır. Hedef: bir asistanın "bağlam israfı"
|
|
23
|
+
sorununu duyduğunda sift'i **bulabileceği** en az beş bağımsız yol.
|
|
24
|
+
|
|
25
|
+
Yıldız ve indirme sayısı sonuç, hedef değil. Onları takip edeceğiz ama
|
|
26
|
+
kovalamayacağız.
|
|
27
|
+
|
|
28
|
+
## Fazlar
|
|
29
|
+
|
|
30
|
+
Her faz kendi başına bitmiş sayılır ve doğrulanabilir bir çıktısı vardır.
|
|
31
|
+
|
|
32
|
+
| # | Faz | Ne biter | Durum |
|
|
33
|
+
|---|-----|----------|---|
|
|
34
|
+
| T1 | Sürüm 1.0.1 | Kayıt defterinin şart koştuğu `mcp-name` işareti + bekleyen kod düzeltmesi, PyPI'da | bekliyor |
|
|
35
|
+
| T2 | Resmî kayıt defteri | `server.json`, `registry.modelcontextprotocol.io`'da yayında | bekliyor |
|
|
36
|
+
| T3 | GitHub keşfedilebilirliği | topics, açıklama, sürüm notu | bekliyor |
|
|
37
|
+
| T4 | Dizinler | mcp.so, PulseMCP, Glama, Smithery | bekliyor |
|
|
38
|
+
| T5 | awesome-mcp-servers | PR açık | bekliyor |
|
|
39
|
+
| T6 | README konumlandırma | Problem, insanların aradığı kelimelerle anılıyor | bekliyor |
|
|
40
|
+
| T7 | Sürekli araştırma | `ARASTIRMA.md` güncel, yeni kanallar izleniyor | sürekli |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## T1 — Sürüm 1.0.1
|
|
45
|
+
|
|
46
|
+
**Neden ilk:** Resmî kayıt defteri PyPI sahipliğini **paketin README'sinden**
|
|
47
|
+
doğruluyor. Aranan dize:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
mcp-name: io.github.slymnysr/sift
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
HTML yorumu içinde olabilir, ama **yayınlanmış pakette bulunmak zorunda.**
|
|
54
|
+
1.0.0'da yok. Yani T2 T1'siz yapılamaz.
|
|
55
|
+
|
|
56
|
+
Aynı sürümde bekleyen bir düzeltme daha var (`notlar/28-KURULUM.md`):
|
|
57
|
+
`server.py`'deki eksik-eklenti mesajı hâlâ `pip install "sift-cli[mcp]"` diyor
|
|
58
|
+
ve o komut Debian/Ubuntu/WSL'de reddediliyor.
|
|
59
|
+
|
|
60
|
+
**Yapılacaklar**
|
|
61
|
+
- README'ye `mcp-name` işareti
|
|
62
|
+
- `server.py` → `NO_MCP` mesajı `uv tool install`'a
|
|
63
|
+
- `test_server.py` ve `mutations.py` aynı dizgeye bağlı, birlikte güncellenecek
|
|
64
|
+
- `pyproject.toml` sürüm 1.0.1
|
|
65
|
+
- Tag `v1.0.1`, CI yeşil, PyPI'da
|
|
66
|
+
|
|
67
|
+
**Bitti sayılır:** PyPI'daki 1.0.1 açıklamasında `mcp-name` dizesi görünüyor.
|
|
68
|
+
|
|
69
|
+
## T2 — Resmî MCP kayıt defteri
|
|
70
|
+
|
|
71
|
+
**Neden en önemlisi:** İstemciler oradan okuyor. Bir modelin sift'i "bilmesinin"
|
|
72
|
+
gerçekçi tek yolu bu — eğitim verisine giremeyecek kadar yeni, ama kayıt defteri
|
|
73
|
+
canlı sorgulanıyor.
|
|
74
|
+
|
|
75
|
+
**Yapılacaklar**
|
|
76
|
+
- `server.json`: ad `io.github.slymnysr/sift`, PyPI paketi `sift-cli`, taşıma
|
|
77
|
+
`stdio`, `runtimeHint` olarak `uvx`
|
|
78
|
+
- `mcp-publisher` ile giriş: **`github-oidc`** tercih edilir — GitHub Action
|
|
79
|
+
içinden, interaktif tarayıcı akışı olmadan. Alternatif: `login github`
|
|
80
|
+
- Yayınla, `registry.modelcontextprotocol.io` üzerinden doğrula
|
|
81
|
+
|
|
82
|
+
**Bitti sayılır:** Kayıt defteri API'si `io.github.slymnysr/sift`'i döndürüyor.
|
|
83
|
+
|
|
84
|
+
## T3 — GitHub keşfedilebilirliği
|
|
85
|
+
|
|
86
|
+
Beş dakikalık iş, aramada büyük fark.
|
|
87
|
+
|
|
88
|
+
- **Topics**: `mcp`, `mcp-server`, `claude`, `claude-code`, `llm`,
|
|
89
|
+
`context-management`, `cli`, `python`, `token-optimization`
|
|
90
|
+
- Depo açıklaması ve website alanı (PyPI bağlantısı)
|
|
91
|
+
- `v1.0.1` için GitHub Release notu — tag var ama release sayfası yok
|
|
92
|
+
|
|
93
|
+
**Bitti sayılır:** `gh repo view` topics'i döndürüyor, Releases sayfası dolu.
|
|
94
|
+
|
|
95
|
+
## T4 — Dizinler
|
|
96
|
+
|
|
97
|
+
Dördü de üçüncü taraf, hepsi ayrı gönderim:
|
|
98
|
+
|
|
99
|
+
| dizin | yol | not |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| mcp.so | Submit düğmesi ya da GitHub issue | ~20.000 sunucu, en büyük toplayıcı |
|
|
102
|
+
| PulseMCP | Gezinti çubuğunda Submit | Haftalık ziyaretçi sayısı gösteriyor |
|
|
103
|
+
| Glama | Form, elle inceleniyor | ~37.000 sunucu izliyor, metakayıt |
|
|
104
|
+
| Smithery | CLI/hosted | MCP'nin Docker Hub'ı sayılıyor |
|
|
105
|
+
|
|
106
|
+
Bunların çoğu ekosistemi **tarıyor** ve sahiplik talep etmene izin veriyor —
|
|
107
|
+
yani T2 bittiğinde bazıları kendiliğinden görünebilir. Yine de elle göndermek
|
|
108
|
+
bekleme süresini kısaltır.
|
|
109
|
+
|
|
110
|
+
**Bitti sayılır:** Dördünde de gönderim yapıldı, kabul edilenler kayıtlı.
|
|
111
|
+
|
|
112
|
+
## T5 — awesome-mcp-servers
|
|
113
|
+
|
|
114
|
+
`punkpeye/awesome-mcp-servers` — PR ile eklenir. Şart: README, açık açıklama,
|
|
115
|
+
çalışan kurulum talimatı. Üçü de var.
|
|
116
|
+
|
|
117
|
+
**Bitti sayılır:** PR açık ve bağlantısı kayıtlı.
|
|
118
|
+
|
|
119
|
+
## T6 — README konumlandırma
|
|
120
|
+
|
|
121
|
+
Şu an README "Runs your command, then gives the model only the lines that
|
|
122
|
+
matter." diye başlıyor — doğru ama **kimsenin aramadığı** bir cümle.
|
|
123
|
+
|
|
124
|
+
İnsanların aradığı: *MCP token waste*, *tool output floods context*, *reduce
|
|
125
|
+
Claude context usage*, *agent context window full*, *MCP token optimization*.
|
|
126
|
+
|
|
127
|
+
Bu kelimeler README'de geçmiyor. Geçmeli — ama **abartmadan ve ölçümle**:
|
|
128
|
+
elimizde 404 satır → 7 satır, %97,6 daha az token, 0 uydurma satır gibi
|
|
129
|
+
gerçek sayılar var. Pazarlama dili değil, ölçüm dili.
|
|
130
|
+
|
|
131
|
+
**Bitti sayılır:** README'nin ilk ekranı problemi arama terimleriyle adlandırıyor
|
|
132
|
+
ve ölçülmüş bir sayı gösteriyor.
|
|
133
|
+
|
|
134
|
+
## T7 — Sürekli araştırma
|
|
135
|
+
|
|
136
|
+
`ARASTIRMA.md` bu işin hafızası. Her yeni kanal, her ret, her ölçüm oraya
|
|
137
|
+
yazılır. Amaç: altı ay sonra "bunu denemiş miydik" sorusunun cevabı olsun.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Bu planın kuralı
|
|
142
|
+
|
|
143
|
+
**Hiçbir fazda abartı yok.** sift'in ölçülmüş sayıları var; onları söylemek
|
|
144
|
+
yeterli. Olmayan bir şeyi iddia etmek — "en iyi", "devrim niteliğinde", uydurma
|
|
145
|
+
kıyaslar — hem yanlış hem de bu projenin bütün duruşuna aykırı: araç, kaybedecek
|
|
146
|
+
bir şeyi olmadığı için güvenilir. Tanıtımı da öyle olmalı.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Araştırma özeti — MCP ekosisteminde keşfedilebilirlik
|
|
2
|
+
|
|
3
|
+
Bu dosya İŞ 1'in hafızası. Her yeni bulgu, her ret, her ölçüm buraya yazılır.
|
|
4
|
+
Amacı altı ay sonra "bunu denemiş miydik" sorusunu cevaplamak.
|
|
5
|
+
|
|
6
|
+
**Son güncelleme:** 9 Eylül 2026
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Resmî MCP kayıt defteri
|
|
11
|
+
|
|
12
|
+
**Adres:** `registry.modelcontextprotocol.io` — Eylül 2025'te önizlemede
|
|
13
|
+
başladı, hâlâ önizleme (kırılgan değişiklik ve veri sıfırlaması olabilir).
|
|
14
|
+
|
|
15
|
+
**Neden en önemli kanal:** İstemciler buradan okuyor ve **canlı sorgulanıyor.**
|
|
16
|
+
Bir modelin eğitim verisine giremeyecek kadar yeni bir paketin bulunabilmesinin
|
|
17
|
+
tek gerçekçi yolu bu.
|
|
18
|
+
|
|
19
|
+
### Yayınlama mekaniği
|
|
20
|
+
|
|
21
|
+
`mcp-publisher` adlı CLI ile. Komutlar: `init`, `login`, `publish`, `status`,
|
|
22
|
+
`validate`, `logout`.
|
|
23
|
+
|
|
24
|
+
**Kimlik doğrulama sağlayıcıları:**
|
|
25
|
+
|
|
26
|
+
| sağlayıcı | ne için |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `github` | Etkileşimli OAuth (tarayıcı) |
|
|
29
|
+
| **`github-oidc`** | **CI/CD — GitHub Actions içinden, tarayıcısız** |
|
|
30
|
+
| `dns` / `http` | Alan adı doğrulama (kendi alan adın varsa) |
|
|
31
|
+
| `none` | Yalnız yerel test |
|
|
32
|
+
|
|
33
|
+
`github-oidc` bizim için doğru olan: yayın CI'dan yapılabilir, elle adım kalmaz.
|
|
34
|
+
|
|
35
|
+
### İsim alanı
|
|
36
|
+
|
|
37
|
+
`io.github.<kullanıcı>/<ad>` — GitHub hesabıyla kanıtlanıyor. Bizimki:
|
|
38
|
+
**`io.github.slymnysr/sift`**
|
|
39
|
+
|
|
40
|
+
Alan adı isim alanı (`com.example/...`) DNS TXT kaydı ya da HTTPS uç noktası
|
|
41
|
+
istiyor; bizim alan adımız yok, GitHub isim alanı yeterli.
|
|
42
|
+
|
|
43
|
+
### PyPI sahiplik doğrulaması — kritik
|
|
44
|
+
|
|
45
|
+
Kayıt defteri, PyPI paketinin **README'sinde** (PyPI'da açıklama olarak
|
|
46
|
+
görünen metin) şu dizeyi arıyor:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
mcp-name: io.github.slymnysr/sift
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
HTML yorumu içinde gizlenebilir:
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
<!-- mcp-name: io.github.slymnysr/sift -->
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Sonucu:** README paketin içinde yayınlandığı için, bu işaret olmadan
|
|
59
|
+
yayınlanmış bir sürüm doğrulanamaz. **1.0.0'da yok → yeni sürüm şart.**
|
|
60
|
+
|
|
61
|
+
> Not: crates.io HTML yorumlarını siliyor, orada görünür metin gerekiyor.
|
|
62
|
+
> PyPI ve NuGet yorumu koruyor. Bizde sorun yok.
|
|
63
|
+
|
|
64
|
+
### Diğer kısıtlar
|
|
65
|
+
|
|
66
|
+
- Yalnız güvenilen kayıtlar: PyPI için **yalnız `pypi.org`**
|
|
67
|
+
- `_meta` içinde yalnız `io.modelcontextprotocol.registry/publisher-provided`
|
|
68
|
+
anahtarı korunuyor, 4 KB sınırı
|
|
69
|
+
- Şema: `https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json`
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 2. Üçüncü taraf dizinler
|
|
74
|
+
|
|
75
|
+
Dördü de ayrı gönderim ister; çoğu ekosistemi **tarıyor** ve sonradan sahiplik
|
|
76
|
+
talep etmene izin veriyor.
|
|
77
|
+
|
|
78
|
+
| dizin | ölçek | gönderim |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| **Glama** (`glama.ai/mcp`) | ~37.000 sunucu (2026 ortası) | Form, elle inceleme. Metakayıt — Anthropic, GitHub, PulseMCP, Microsoft besliyor |
|
|
81
|
+
| **mcp.so** | ~20.000 sunucu | Sitedeki Submit ya da GitHub issue |
|
|
82
|
+
| **Smithery** (`smithery.ai`) | 7.000+ | "MCP'nin Docker Hub'ı"; yerel CLI kurulumu ya da barındırılan uzak sunucu |
|
|
83
|
+
| **PulseMCP** | — | Gezinti çubuğunda Submit. **Haftalık ziyaretçi sayısı gösteriyor** — tek yerde bulunan bir veri |
|
|
84
|
+
|
|
85
|
+
PulseMCP'nin ziyaretçi sayacı bizim için ayrıca değerli: tanıtımın işe yarayıp
|
|
86
|
+
yaramadığını ölçebileceğimiz nadir bir dış gösterge.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 3. awesome-mcp-servers
|
|
91
|
+
|
|
92
|
+
`punkpeye/awesome-mcp-servers` — GitHub'da PR ile eklenir.
|
|
93
|
+
|
|
94
|
+
**Şartlar:** README, açık bir açıklama, çalışan kurulum talimatı. Üçü de bizde
|
|
95
|
+
var (kurulum talimatı 28. fazda düzeltildi).
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 4. Henüz araştırılmamış / açık sorular
|
|
100
|
+
|
|
101
|
+
- **Reddit `r/ClaudeAI`, `r/mcp`** — norm ne, kendi projesini paylaşmak hoş
|
|
102
|
+
karşılanıyor mu, hangi biçimde
|
|
103
|
+
- **Hacker News** — "Show HN" eşiği; erken paylaşım bir kez yakılan bir kart
|
|
104
|
+
- **dev.to / Medium yazısı** — ölçüm tablosu iyi bir yazı konusu olabilir:
|
|
105
|
+
"aynı işi sift'li ve sift'siz ölçtük"
|
|
106
|
+
- **MCP istemcileri** — Claude Code dışında hangi istemciler kayıt defterinden
|
|
107
|
+
okuyor (Cursor, Windsurf, Zed, Cline?) ve ayrı gönderim istiyorlar mı
|
|
108
|
+
- **GitHub Release** sayfasının keşfedilebilirliğe etkisi
|
|
109
|
+
- **PyPI sayfasının okunamaması** — `pypi.org/project/sift-cli/` JavaScript
|
|
110
|
+
hatası veriyor, bir asistan çekmeye çalışınca boş dönüyor. README ham hâli
|
|
111
|
+
çalışıyor. Bu, PyPI açıklamasının bir asistan için işe yaramadığı anlamına
|
|
112
|
+
gelebilir — doğrulanmalı
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 5. Ölçüm — bugünün taban çizgisi
|
|
117
|
+
|
|
118
|
+
| gösterge | 9 Eylül 2026 |
|
|
119
|
+
|---|---|
|
|
120
|
+
| GitHub yıldız | 0 |
|
|
121
|
+
| GitHub topics | 0 |
|
|
122
|
+
| PyPI sürüm | 1.0.0 |
|
|
123
|
+
| PyPI indirme | (ölçülmedi) |
|
|
124
|
+
| Kayıt defteri | kayıtlı değil |
|
|
125
|
+
| Dizin | 0/4 |
|
|
126
|
+
|
|
127
|
+
Sonraki ölçümler buraya eklenecek.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Kaynaklar
|
|
132
|
+
|
|
133
|
+
- [Introducing the MCP Registry — MCP Blog](https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/)
|
|
134
|
+
- [modelcontextprotocol/registry (GitHub)](https://github.com/modelcontextprotocol/registry)
|
|
135
|
+
- [MCP Registry — Package Types](https://modelcontextprotocol.io/registry/package-types)
|
|
136
|
+
- [Official Registry server.json Requirements](https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/official-registry-requirements.md)
|
|
137
|
+
- [How to list your MCP server — Tallyfy](https://tallyfy.com/how-to-list-mcp-server-registry-smithery-glama-pulsemcp/)
|
|
138
|
+
- [Best MCP Registries in 2026 — TrueFoundry](https://www.truefoundry.com/blog/best-mcp-registries)
|
|
139
|
+
- [MCP Server Directories — DYNO Mapper](https://dynomapper.com/blog/ai/mcp-server-directories/)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# T1 — Sürüm 1.0.1
|
|
2
|
+
|
|
3
|
+
**Tarih:** 9 Eylül 2026
|
|
4
|
+
**Durum:** bitti
|
|
5
|
+
|
|
6
|
+
## Neden bir sürüm daha
|
|
7
|
+
|
|
8
|
+
İki ayrı iş aynı yayına bindi.
|
|
9
|
+
|
|
10
|
+
**Birincisi kayıt defteri.** `registry.modelcontextprotocol.io`, PyPI
|
|
11
|
+
sahipliğini paketin **açıklamasından** doğruluyor: yayınlanmış sürümün
|
|
12
|
+
`long_description`'ında `mcp-name: io.github.slymnysr/sift` dizesi geçmek
|
|
13
|
+
zorunda. 1.0.0'da geçmiyordu. README GitHub'da anında değişir ama PyPI'daki
|
|
14
|
+
açıklama sürümün içinde donmuştur — yani T2 yeni bir sürüm olmadan yapılamazdı.
|
|
15
|
+
|
|
16
|
+
**İkincisi 28. fazdan kalan borç.** `sift-mcp`, `mcp` eklentisi olmadan
|
|
17
|
+
çalıştırıldığında kullanıcıya `pip install "sift-cli[mcp]"` diyordu. O komut
|
|
18
|
+
Debian, Ubuntu ve WSL'de PEP 668 gereği reddediliyor. README düzeltilmişti;
|
|
19
|
+
mesaj paketin içinde ships ettiği için kodda bekliyordu.
|
|
20
|
+
|
|
21
|
+
## Yapılan
|
|
22
|
+
|
|
23
|
+
| dosya | değişiklik |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `README.md` | Başlığın altına `<!-- mcp-name: io.github.slymnysr/sift -->` |
|
|
26
|
+
| `src/sift/server.py` | `pip install` → `uv tool install`, altına `pip`in neden reddedildiği |
|
|
27
|
+
| `test/test_server.py` | Aynı dizgeyi arayan iddia; ayrıca "çalışmayan komut verilmemeli" kontrolü |
|
|
28
|
+
| `test/mutations.py` | Aynı dizgeyi çapa olarak kullanan mutasyon |
|
|
29
|
+
| `pyproject.toml`, `src/sift/__init__.py` | 1.0.0 → 1.0.1 |
|
|
30
|
+
|
|
31
|
+
Beşi de aynı cümleye bağlıydı; `test_package.py` zaten sürümün iki yerde
|
|
32
|
+
uyuşmasını istiyor, o yüzden `__init__.py`'yi unutmak testte anında yakalandı.
|
|
33
|
+
|
|
34
|
+
## İşaret gerçekten pakete girdi mi
|
|
35
|
+
|
|
36
|
+
Yorum satırı olduğu için gözle görünmüyor; bu yüzden yayından önce paketin
|
|
37
|
+
kendisinden okundu:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
sdist PKG-INFO Description-Content-Type: text/markdown
|
|
41
|
+
sdist isaret var mi: True version: 1.0.1
|
|
42
|
+
wheel isaret var mi: True version: 1.0.1
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
PyPI açıklaması bu `Description` alanından üretiliyor. crates.io HTML yorumlarını
|
|
46
|
+
siliyor, PyPI korumuyor — bizde sorun yok.
|
|
47
|
+
|
|
48
|
+
## Bitti sayılır
|
|
49
|
+
|
|
50
|
+
Plandaki ölçüt: *PyPI'daki 1.0.1 açıklamasında `mcp-name` dizesi görünüyor.*
|
|
@@ -262,7 +262,8 @@ def test_and_the_test_above_would_have_noticed():
|
|
|
262
262
|
finished = _without_mcp("import sift.server\n")
|
|
263
263
|
|
|
264
264
|
assert finished.returncode != 0
|
|
265
|
-
assert '
|
|
265
|
+
assert 'uv tool install "sift-cli[mcp]"' in finished.stderr
|
|
266
|
+
assert "Plain `pip` is refused" in finished.stderr, "calismayan komut verilmemeli"
|
|
266
267
|
assert "Traceback" not in finished.stderr
|
|
267
268
|
assert "`sift`) is already installed" in finished.stderr
|
|
268
269
|
|
|
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
|