tsouth89/toolport - Open Source PR Review Scorecard

Local-first MCP gateway. One port for every tool and every AI client: lazy discovery (~90% token savings), tool integrity + quarantine, secrets in the OS keychain.

C-Rank Grade: S (Elite) - 81/100

External PR Merge Rate: 94%

Response Time: 15h

First Timer Success: 88%

Frequently Asked Questions

Is tsouth89/toolport welcoming to first-time open-source contributors?

tsouth89/toolport has a recorded first-timer success rate of 88.2%. Repositories ranked S typically provide actionable feedback during code reviews and actively nurture new community contributors.

How fast can I expect code review feedback on my pull request?

Maintainers in tsouth89/toolport respond to incoming external pull requests in approximately 15.2 hours on average. Keeping PRs focused on single tasks and ensuring tests pass helps maintainers review faster.

What does the 81.2 C-Rankâ„¢ score (S Tier) represent?

The C-Rank™ system evaluates GitHub projects on a 0–100 scale using real data: PR merge rates, review turnaround time, active maintainer presence, and first-time contributor success. A score of 81.2 places tsouth89/toolport in the S tier.

What is the external contributor pull request merge rate for tsouth89/toolport?

The external contributor pull request merge rate for tsouth89/toolport is 93.7%, based on public PR activity from non-core contributors.

Are there Good First Issues available in tsouth89/toolport?

tsouth89/toolport currently has 5 active issue(s) tagged with beginner-friendly labels like "good first issue", "beginner", or "up-for-grabs".

tsouth89
tsouth89/toolportS•Elite186
GitHub
Back to Explorer
tsouth89

tsouth89/toolport

186
S•Elite(81/100)Rust

Local-first MCP gateway. One port for every tool and every AI client: lazy discovery (~90% token savings), tool integrity + quarantine, secrets in the OS keychain.

Compare•
Jump to:

AI Maintainer Review Guidelines

Review Persona

Welcoming Community Builder

Warmth Score
8.2/10
Patience Score
8.4/10
Nitpick Rate
35%

Highly welcoming maintainers in tsouth89/toolport. Prompt code reviews with positive guidance for new contributors.

Top PR Submission Do's

  • •Ensure code complies with the project coding style
  • •Keep PRs scoped to a single concern
  • •Include context and link to the related issue

Top PR Friction Pitfalls (Don'ts)

  • •Do not submit PRs without linking an issue
  • •Do not break existing tests without fixing them
  • •Do not mix unrelated refactors in a single PR
Response Velocity
15 hours
Standard maintainer review cycle

Average Response Latency

Tracks hours until a maintainer leaves a review, comment, or PR response.

Merge Efficiency
93.7%
High acceptance rate for external PRs

External Acceptance Rate

Percentage of community pull requests successfully merged into main.

First-Timer Success
88.2%
Strong first-timer PR acceptance rate

First PR Conversion

Rate at which developers submitting their first repository PR succeed.

Active Maintainers
11 core
Highly collaborative maintainer core
Diagnostic Health HUD
93.7%
Merge Gauge
88.2%
1st-Timer
Community Vibe82/100

Embed C-Rank Badge

Show contributors that your repository actively reviews and merges external pull requests.

GetMerged C-Rank badge for tsouth89/toolport
[![GetMerged C-Rank](https://getmerged.abhishekco.de/api/badge/tsouth89/toolport)](https://getmerged.abhishekco.de/tsouth89/toolport?utm_source=github&utm_medium=badge)

Active Good First Issues (5)

View on GitHub

Problem Code mode (toolport_run_script) runs an untrusted script in an embedded JS interpreter. Limits (src-tauri/src/codemode.rs:113-124) bounds everything except allocation: Limits { max_calls: 64, wall_clock: Duration::from_secs(60), max_parallel: 8, max_promise_jobs: 100_000, loop_iteration_limit: 10_000_000, recursion_limit: 400, } Those bound time and iteration count, not bytes. A script can allocate arbitrarily in very few iterations: let a = [1]; for (let i = 0; i < 30; i++) a = a.concat(a); // ~1G elements, 30 iterations That is far under loop_iteration_limit, never yields to the promise-job executor, and never reaches a host-call reserve, so no existing limit fires. The wall clock is only checked at host-call reserve and between jobs (codemode.rs:962-971, :160), so it never gets a chance either. Rust OOM is an abort, not a catchable error, so the process dies. There is also no size cap on the submitted script. src-tauri/src/bin/toolport-gateway.rs:60

📅 Opened Aug 16, 2026💬 2 comments
Quality: 90/100Contribute

Problem The Test button is disabled while test.status === "testing". But every keystroke calls clearTest(), which resets any non-idle status back to "idle" — including "testing". It does not distinguish "a stale result exists" from "a test is in flight", and nothing cancels or tags the pending testServer call. So editing a field during a test re-enables the Test button while the first request is still outstanding, and there is no request-generation guard to discard a late response. Where: src/components/ServerDialog.tsx:101-103 (clearTest) src/components/ServerDialog.tsx:501 (the disabled gate) Callers: set() and setEnvRow() Failure scenario A user clicks Test on a working config. While it is in flight they edit the command to something broken, which flips the status back to idle and re-enables the button. They click Test again. The first call, made against the working config, resolves after the second and writes { status: "ok", message: "Connected. Found N tools." }. The dialog no

📅 Opened Aug 15, 2026💬 0 comments
Quality: 90/100Contribute

Problem handleSave calls addServer/updateServer first, then loops over declared secrets calling setSecret for each. If a setSecret throws after the server was already created, control lands in the single catch, which shows Couldn't save <name> and nothing else. onSaved(result) is never called, so the parent's registry state never learns the server exists, and the dialog stays open with entry.id still "". Where: src/components/ServerDialog.tsx:260-278 Failure scenario A user adds a server with two env secrets. The server is created, the first setSecret succeeds, the second throws because the keychain is locked. The user sees "Couldn't save X" and believes nothing happened. In fact the server exists and one secret is vaulted. They click Save again; because this is not edit mode, addServer runs a second time and creates a duplicate server entry. Acceptance criteria A failure after the server was created is reported as a partial success, naming what did and did not happen. The parent is

📅 Opened Aug 15, 2026💬 2 comments
Quality: 90/100Contribute

Problem bump_secrets_generation discards the result of write_registry. Per its own doc comment, that write is the sole mechanism that makes a running gateway reload after a keychain-only change. All three callers return Ok immediately afterwards, so a failed bump is invisible to the caller and to the user. Where: src-tauri/src/desktop.rs:2961-2966 (bump_secrets_generation) Callers: set_auth_token, clear_auth_token, authenticate_oauth Failure scenario A user clicks "Clear token" to revoke a leaked bearer. The keychain delete succeeds. registry::update then fails, because the cross-process registry lock is held by a running gateway or the disk is full. The command returns Ok, the UI shows the token as removed, and the already-running gateway never reloads. It keeps serving requests with the credential the user believes they just revoked. The same path makes a fresh OAuth sign-in silently not take effect, leaving the user looking at 401s from a server they just authenticated against. Ac

📅 Opened Aug 15, 2026💬 0 comments

Problem stop_http_bridge takes the child out of the tracked state, discards the result of both kill() and wait(), clears the port and token, and returns a status whose running field is derived from port.is_some() — so always false. The same file already knows how to do this. stop_spawned_gateways inspects the kill() result, falls back to try_wait, and puts the child handle back on failure. stop_http_bridge itself is careful about the resume marker directly above, with a comment about not silently resurrecting something the user disabled, and then drops that care for the actual kill. Where: src-tauri/src/desktop.rs:4225-4231 (stop_http_bridge) Correct pattern: stop_spawned_gateways in the same file Failure scenario The user turns off the HTTP endpoint in Settings. kill() fails (access denied on the handle on Windows, or the child is mid-syscall). The UI reports the endpoint stopped, but the gateway keeps listening on 127.0.0.1 and keeps honoring every bearer token already issued to

📅 Opened Aug 15, 2026💬 1 comment
Quality: 90/100Contribute
Looking for more Rust beginner tasks?Explore Rust GFI

Contributor Community Vibe Feedback

Rate what actually matters after opening a pull request here.

Have you contributed to this repo?

Rate your first-hand PR experience (review speed, maintainer responsiveness, and onboarding ease) to help other contributors.

3 ratings required
Maintainer helpfulness
Review speed
Beginner friendliness

Contributor Compatibility & Review Speed Analysis for tsouth89/toolport

When evaluating whether to contribute to tsouth89/toolport, response velocity and maintainer engagement are crucial. GetMerged continuously tracks pull request trajectories, first-comment latency, and code review rounds to help developers avoid submitting pull requests to backlogged repositories.

Currently, maintainers of tsouth89/toolport acknowledge new external contributions in approximately 15 hours. Out of all submitted pull requests from non-core authors in the last 180-day window, 93.7% were successfully merged into the primary branch.

Frequently Asked Questions - Contributing to tsouth89/toolport

01

Is tsouth89/toolport welcoming to first-time open-source contributors?

tsouth89/toolport has a recorded first-timer success rate of 88.2%. Repositories ranked Elite typically provide actionable feedback during code reviews and actively nurture new community contributors.

02

How fast can I expect code review feedback on my pull request?

The initial maintainer response time averages ~15 hours. Keeping PRs scoped to single concerns and ensuring CI checks succeed will optimize review turnaround.

03

What does the 81.2 C-Rankâ„¢ score represent?

The C-Rankâ„¢ index scores repositories on a 0 to 100 scale using an objective formula: external PR merge rates, initial response speed, active maintainer count, and first-time contributor retention. A score of 81.2 places tsouth89/toolport in the Elite tier.

04

What is the external contributor pull request merge rate for tsouth89/toolport?

The external pull request merge rate is 93.7%. GetMerged isolates non-core community contributions so external developers get an accurate benchmark of PR acceptance probability.

05

Are there beginner Good First Issues open in tsouth89/toolport?

Yes, tsouth89/toolport currently has 5 active issue(s) tagged with beginner-friendly labels. You can inspect these directly from the repository issues tab.

GetMerged C-Rankâ„¢ Indexing Standard

All metrics displayed for tsouth89/toolport are automatically retrieved via the public GitHub API and recalculated daily. Insider pull requests submitted by repository owners or organization members are excluded from merge rate calculations to preserve objective external contributor statistics.

tsouth89/toolport • 81.2/100 C-Rank (S-Tier) | GetMerged