Repository Analysis

modelcontextprotocol/servers

Model Context Protocol Servers

3.9 Likely human-written View on GitHub
3.9
Adjusted Score
3.9
Raw Score
100%
Time Factor
2026-05-30
Last Push
86,464
Stars
TypeScript
Language
22,380
Lines of Code
118
Files
65
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 1MEDIUM 5LOW 59

Pattern Findings

65 matches across 7 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers45 hits · 46 pts
SeverityFileLineSnippet
LOWsrc/everything/tools/simulate-research-query.ts331function getInterpretationsForTopic(
LOWsrc/filesystem/path-validation.ts11export function isPathWithinAllowedDirectories(absolutePath: string, allowedDirectories: string[]): boolean {
LOWsrc/filesystem/lib.ts76function resolveRelativePathAgainstAllowedDirectories(relativePath: string): string {
LOWsrc/filesystem/lib.ts374export async function searchFilesWithValidation(
LOWsrc/filesystem/index.ts706async function updateAllowedDirectoriesFromRoots(requestedRoots: Root[]) {
LOWsrc/time/test/time_server_test.py85def test_get_current_time_with_invalid_timezone():
LOWsrc/time/test/time_server_test.py465def test_get_local_tz_with_override():
LOWsrc/time/test/time_server_test.py472def test_get_local_tz_with_invalid_override():
LOWsrc/time/test/time_server_test.py479def test_get_local_tz_with_valid_iana_name(mock_get_localzone):
LOWsrc/time/test/time_server_test.py488def test_get_local_tz_when_none_returned(mock_get_localzone):
LOWsrc/time/test/time_server_test.py496def test_get_local_tz_handles_windows_timezones(mock_get_localzone):
LOWsrc/time/test/time_server_test.py523def test_get_local_tz_various_timezones(mock_get_localzone, timezone_name):
LOWsrc/fetch/tests/test_server.py29 def test_url_with_query_params(self):
LOWsrc/fetch/tests/test_server.py84 def test_empty_content_returns_error(self):
LOWsrc/fetch/tests/test_server.py149 async def test_allows_when_robots_txt_allows_all(self):
LOWsrc/fetch/tests/test_server.py168 async def test_blocks_when_robots_txt_disallows_all(self):
LOWsrc/fetch/tests/test_server.py247 async def test_fetch_json_returns_raw(self):
LOWsrc/fetch/src/mcp_server_fetch/server.py27def extract_content_from_html(html: str) -> str:
LOWsrc/fetch/src/mcp_server_fetch/server.py66async def check_may_autonomously_fetch_url(url: str, user_agent: str, proxy_url: str | None = None) -> None:
LOWsrc/git/tests/test_server.py257def test_validate_repo_path_no_restriction():
LOWsrc/git/tests/test_server.py262def test_validate_repo_path_exact_match(tmp_path: Path):
LOWsrc/git/tests/test_server.py269def test_validate_repo_path_subdirectory(tmp_path: Path):
LOWsrc/git/tests/test_server.py278def test_validate_repo_path_outside_allowed(tmp_path: Path):
LOWsrc/git/tests/test_server.py302def test_validate_repo_path_symlink_escape(tmp_path: Path):
LOWsrc/git/tests/test_server.py318def test_git_diff_rejects_flag_injection(test_repository):
LOWsrc/git/tests/test_server.py454def test_git_create_branch_rejects_flag_injection(test_repository):
LOWsrc/git/tests/test_server.py463def test_git_create_branch_rejects_base_branch_flag_injection(test_repository):
LOWsrc/git/tests/test_server.py469def test_git_log_rejects_timestamp_flag_injection(test_repository):
LOWsrc/git/tests/test_server.py478def test_git_branch_rejects_contains_flag_injection(test_repository):
LOWsrc/git/tests/test_server.py35def test_git_checkout_existing_branch(test_repository):
LOWsrc/git/tests/test_server.py42def test_git_checkout_nonexistent_branch(test_repository):
LOWsrc/git/tests/test_server.py75def test_git_branch_not_contains(test_repository):
LOWsrc/git/tests/test_server.py99def test_git_add_specific_files(test_repository):
LOWsrc/git/tests/test_server.py127def test_git_diff_unstaged_empty(test_repository):
LOWsrc/git/tests/test_server.py142def test_git_diff_staged_empty(test_repository):
LOWsrc/git/tests/test_server.py219def test_git_create_branch_from_base(test_repository):
LOWsrc/git/tests/test_server.py245def test_git_show_initial_commit(test_repository):
LOWsrc/git/tests/test_server.py290def test_validate_repo_path_traversal_attempt(tmp_path: Path):
LOWsrc/git/tests/test_server.py330def test_git_checkout_rejects_flag_injection(test_repository):
LOWsrc/git/tests/test_server.py342def test_git_diff_allows_valid_refs(test_repository):
LOWsrc/git/tests/test_server.py368def test_git_checkout_allows_valid_branches(test_repository):
LOWsrc/git/tests/test_server.py386def test_git_diff_rejects_malicious_refs(test_repository):
LOWsrc/git/tests/test_server.py412def test_git_checkout_rejects_malicious_refs(test_repository):
LOWsrc/git/tests/test_server.py432def test_git_show_rejects_flag_injection(test_repository):
LOWsrc/git/tests/test_server.py441def test_git_show_rejects_malicious_refs(test_repository):
Self-Referential Comments5 hits · 16 pts
SeverityFileLineSnippet
MEDIUMsrc/git/tests/test_server.py309 # Create a symlink inside allowed that points outside
MEDIUMsrc/git/tests/test_server.py64 # Create a new branch and commit to it
MEDIUMsrc/git/tests/test_server.py78 # Create a new branch and commit to it
MEDIUMsrc/git/tests/test_server.py347 # Create a branch with a commit for diffing
MEDIUMsrc/git/tests/test_server.py373 # Create a branch to checkout
Fake / Example Data7 hits · 8 pts
SeverityFileLineSnippet
LOWsrc/memory/__tests__/knowledge-graph.test.ts272 { name: 'Acme Corp', entityType: 'company', observations: ['tech company'] },
LOWsrc/memory/__tests__/knowledge-graph.test.ts276 { from: 'Alice', to: 'Acme Corp', relationType: 'works_at' },
LOWsrc/memory/__tests__/knowledge-graph.test.ts277 { from: 'Bob', to: 'Acme Corp', relationType: 'competitor' },
LOWsrc/memory/__tests__/knowledge-graph.test.ts290 expect(result.entities[0].name).toBe('Acme Corp');
LOWsrc/memory/__tests__/knowledge-graph.test.ts318 expect(result.relations[0].to).toBe('Acme Corp');
LOWsrc/everything/__tests__/tools.test.ts635 name: 'John Doe',
LOWsrc/everything/__tests__/tools.test.ts657 expect(result.content[1].text).toContain('John Doe');
Verbosity Indicators4 hits · 8 pts
SeverityFileLineSnippet
LOWsrc/filesystem/path-validation.ts71 // On Windows, we need to check if both paths are on the same drive
LOWsrc/filesystem/__tests__/path-validation.test.ts949 // Step 1: validatePath would pass for legitimate file
LOWsrc/filesystem/__tests__/path-validation.test.ts952 // Step 2: Race condition - replace file with symlink after validation
LOWsrc/filesystem/__tests__/path-validation.test.ts956 // Step 3: Read operation follows symlink to forbidden location
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippet
HIGHREADME.md220 "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
Excessive Try-Catch Wrapping2 hits · 2 pts
SeverityFileLineSnippet
LOWsrc/time/src/mcp_server_time/server.py56 except Exception as e:
LOWsrc/time/src/mcp_server_time/server.py215 except Exception as e:
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWsrc/git/src/mcp_server_git/server.py249 # Check if repo_path is the same as or a subdirectory of allowed_repository