Rename project and namespaces
This commit is contained in:
parent
e7fa6194f6
commit
c9ed453745
164 changed files with 426 additions and 918 deletions
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"cake.tool": {
|
||||
"version": "5.0.0",
|
||||
"commands": [
|
||||
"dotnet-cake"
|
||||
],
|
||||
"rollForward": false
|
||||
}
|
||||
}
|
||||
}
|
||||
18
.github/pull_request_template.md
vendored
18
.github/pull_request_template.md
vendored
|
|
@ -1,18 +0,0 @@
|
|||
# Pull Request
|
||||
|
||||
## Description of Changes
|
||||
<!-- Please provide a clear and concise description of your changes -->
|
||||
|
||||
## Related Issue(s)
|
||||
<!-- Please link to the issue(s) this PR addresses -->
|
||||
- Fixes #
|
||||
|
||||
## Testing Done
|
||||
<!-- Describe the testing you have performed -->
|
||||
- [ ] Unit tests added/updated
|
||||
- [ ] Integration tests added/updated
|
||||
- [ ] Manual testing performed
|
||||
|
||||
## Breaking Changes
|
||||
<!-- List any breaking changes here, or delete this section if none -->
|
||||
None
|
||||
37
.github/workflows/ci.yml
vendored
37
.github/workflows/ci.yml
vendored
|
|
@ -1,20 +1,20 @@
|
|||
name: .NET Build, Test and publish
|
||||
name: Build and Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main", "master" ]
|
||||
branches: ["main"]
|
||||
pull_request:
|
||||
branches: [ "main", "master" ]
|
||||
release:
|
||||
types: [published,edited]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
branches: ["main"]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
configuration: [Debug, Release]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
@ -25,10 +25,12 @@ jobs:
|
|||
uses: actions/setup-dotnet@v2
|
||||
with:
|
||||
dotnet-version: |
|
||||
8.0.x
|
||||
9.0.x
|
||||
8.0.x
|
||||
|
||||
# Netfx testing on non-Windows requires mono
|
||||
- name: Setup Mono
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install -y mono-devel
|
||||
|
||||
- name: Set up Node.js
|
||||
|
|
@ -41,12 +43,9 @@ jobs:
|
|||
|
||||
- name: Install dependencies for tests
|
||||
run: npm install @modelcontextprotocol/server-memory
|
||||
|
||||
- name: Run Cake script
|
||||
uses: cake-build/cake-action@v1
|
||||
with:
|
||||
verbosity: Diagnostic
|
||||
env:
|
||||
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY}}
|
||||
SONAR_LOGIN: ${{ secrets.SONAR_LOGIN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build
|
||||
run: dotnet build --configuration ${{ matrix.configuration }}
|
||||
|
||||
- name: Test
|
||||
run: dotnet test --filter '(Execution!=Manual)' --no-build --configuration ${{ matrix.configuration }}
|
||||
|
|
|
|||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -71,6 +71,3 @@ $RECYCLE.BIN/
|
|||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
/mcpdotnet.v3.ncrunchsolution
|
||||
/.NCrunch_mcpdotnet
|
||||
*.ncrunchproject
|
||||
|
|
|
|||
|
|
@ -1,133 +0,0 @@
|
|||
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official email address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
mcpdotnet.conduct@gmail.com.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
# Contributing to mcpdotnet
|
||||
|
||||
Thank you for your interest in contributing to mcpdotnet! This project is in its early stages, and we welcome contributions from the community.
|
||||
|
||||
## Getting Started
|
||||
|
||||
1. Fork the repository
|
||||
2. Clone your fork: `git clone https://github.com/yourusername/mcpdotnet.git`
|
||||
3. Create a branch: `git checkout -b your-feature-name`
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- .NET 8.0 SDK or later
|
||||
- Your favorite IDE (Visual Studio 2022, VS Code, Rider, etc.)
|
||||
|
||||
## Development Process
|
||||
|
||||
1. Write your code
|
||||
2. Add tests for your changes
|
||||
3. Ensure all tests pass
|
||||
4. Update documentation if needed
|
||||
5. Submit a pull request
|
||||
|
||||
## Coding Guidelines
|
||||
|
||||
- Follow standard C# coding conventions
|
||||
- Use meaningful variable and method names
|
||||
- Write XML documentation comments for public APIs
|
||||
- Keep methods focused and concise
|
||||
|
||||
## Pull Request Process
|
||||
|
||||
1. Update the README.md with details of changes if needed
|
||||
2. Follow the PR template
|
||||
3. Wait for review from maintainers
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Please note that this project adheres to a Code of Conduct. By participating, you agree to uphold this code.
|
||||
|
||||
## Questions?
|
||||
|
||||
Feel free to open an issue for any questions or concerns.
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
mode: ContinuousDeployment
|
||||
commit-message-incrementing: Disabled
|
||||
2
LICENSE
2
LICENSE
|
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2024 Peder Holdgaard Pedersen
|
||||
Copyright (c) 2025 the original author or authors.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
|||
98
ModelContextProtocol.sln
Normal file
98
ModelContextProtocol.sln
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.13.35507.96
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol", "src\ModelContextProtocol\ModelContextProtocol.csproj", "{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.Tests", "tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj", "{FF41F619-833D-4FA2-8C53-04D0A1D5AA61}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MEAIToolsConsole", "samples\microsoft.extensions.ai\tools\ToolsConsole\MEAIToolsConsole.csproj", "{76E295FA-9E85-7B99-332A-2CDBFCD5860A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnthropicToolsConsole", "samples\anthropic\tools\ToolsConsole\AnthropicToolsConsole.csproj", "{CA0BB450-1903-2F92-A68D-1285976551D6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.TestServer", "tests\ModelContextProtocol.TestServer\ModelContextProtocol.TestServer.csproj", "{7C229573-A085-4ECC-8131-958CDA2BE731}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestServerWithHosting", "samples\TestServerWithHosting\TestServerWithHosting.csproj", "{6499876E-2F76-44A8-B6EB-5B889C6E9B7F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{2A77AF5C-138A-4EBB-9A13-9205DCD67928}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.TestSseServer", "tests\ModelContextProtocol.TestSseServer\ModelContextProtocol.TestSseServer.csproj", "{79B94BF9-E557-33DB-3F19-B2C7D9BF8C56}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspNetCoreSseServer", "samples\AspNetCoreSseServer\AspNetCoreSseServer.csproj", "{B6F42305-423F-56FF-090F-B7263547F924}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A2F1F52A-9107-4BF8-8C3F-2F6670E7D0AD}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B6FB2B28-D5DE-4654-BE9A-45E305DE4852}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
global.json = global.json
|
||||
LICENSE = LICENSE
|
||||
README.MD = README.MD
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1288ADA5-1BF1-4A7F-A33E-9EA29097AA40}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{20AACB9B-307D-419C-BCC6-1C639C402295}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.github\workflows\ci.yml = .github\workflows\ci.yml
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FF41F619-833D-4FA2-8C53-04D0A1D5AA61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FF41F619-833D-4FA2-8C53-04D0A1D5AA61}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FF41F619-833D-4FA2-8C53-04D0A1D5AA61}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FF41F619-833D-4FA2-8C53-04D0A1D5AA61}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{76E295FA-9E85-7B99-332A-2CDBFCD5860A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{76E295FA-9E85-7B99-332A-2CDBFCD5860A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{76E295FA-9E85-7B99-332A-2CDBFCD5860A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{76E295FA-9E85-7B99-332A-2CDBFCD5860A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CA0BB450-1903-2F92-A68D-1285976551D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CA0BB450-1903-2F92-A68D-1285976551D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CA0BB450-1903-2F92-A68D-1285976551D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CA0BB450-1903-2F92-A68D-1285976551D6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7C229573-A085-4ECC-8131-958CDA2BE731}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7C229573-A085-4ECC-8131-958CDA2BE731}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7C229573-A085-4ECC-8131-958CDA2BE731}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7C229573-A085-4ECC-8131-958CDA2BE731}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6499876E-2F76-44A8-B6EB-5B889C6E9B7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6499876E-2F76-44A8-B6EB-5B889C6E9B7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6499876E-2F76-44A8-B6EB-5B889C6E9B7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6499876E-2F76-44A8-B6EB-5B889C6E9B7F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{79B94BF9-E557-33DB-3F19-B2C7D9BF8C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{79B94BF9-E557-33DB-3F19-B2C7D9BF8C56}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{79B94BF9-E557-33DB-3F19-B2C7D9BF8C56}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{79B94BF9-E557-33DB-3F19-B2C7D9BF8C56}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B6F42305-423F-56FF-090F-B7263547F924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B6F42305-423F-56FF-090F-B7263547F924}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B6F42305-423F-56FF-090F-B7263547F924}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B6F42305-423F-56FF-090F-B7263547F924}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F} = {A2F1F52A-9107-4BF8-8C3F-2F6670E7D0AD}
|
||||
{FF41F619-833D-4FA2-8C53-04D0A1D5AA61} = {2A77AF5C-138A-4EBB-9A13-9205DCD67928}
|
||||
{76E295FA-9E85-7B99-332A-2CDBFCD5860A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
|
||||
{CA0BB450-1903-2F92-A68D-1285976551D6} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
|
||||
{7C229573-A085-4ECC-8131-958CDA2BE731} = {2A77AF5C-138A-4EBB-9A13-9205DCD67928}
|
||||
{6499876E-2F76-44A8-B6EB-5B889C6E9B7F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
|
||||
{79B94BF9-E557-33DB-3F19-B2C7D9BF8C56} = {2A77AF5C-138A-4EBB-9A13-9205DCD67928}
|
||||
{B6F42305-423F-56FF-090F-B7263547F924} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
|
||||
{20AACB9B-307D-419C-BCC6-1C639C402295} = {1288ADA5-1BF1-4A7F-A33E-9EA29097AA40}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {384A3888-751F-4D75-9AE5-587330582D89}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
61
README.MD
61
README.MD
|
|
@ -1,16 +1,9 @@
|
|||
# mcpdotnet
|
||||
[](https://www.nuget.org/packages/mcpdotnet/)
|
||||

|
||||
[](LICENSE)
|
||||
# MCP .NET SDK
|
||||
|
||||
[](https://sonarcloud.io/summary/new_code?id=PederHP_mcpdotnet)
|
||||
[](https://sonarcloud.io/summary/new_code?id=PederHP_mcpdotnet)
|
||||
[](https://sonarcloud.io/summary/new_code?id=PederHP_mcpdotnet)
|
||||
[](https://sonarcloud.io/summary/new_code?id=PederHP_mcpdotnet)
|
||||
[](https://sonarcloud.io/summary/new_code?id=PederHP_mcpdotnet)
|
||||
[](https://sonarcloud.io/summary/new_code?id=PederHP_mcpdotnet)
|
||||
The official .NET SDK for the [Model Context Protocol](https://modelcontextprotocol.io/), enabling .NET applications to connect to and interact with MCP clients and servers.
|
||||
|
||||
A .NET implementation of the Model Context Protocol (MCP), enabling .NET applications to connect to and interact with MCP clients and servers.
|
||||
> [!NOTE]
|
||||
> This repo is still in preview, breaking changes can be introduced without prior notice.
|
||||
|
||||
## About MCP
|
||||
|
||||
|
|
@ -21,17 +14,6 @@ For more information about MCP:
|
|||
- [Protocol Specification](https://spec.modelcontextprotocol.io/)
|
||||
- [GitHub Organization](https://github.com/modelcontextprotocol)
|
||||
|
||||
## Available Packages
|
||||
|
||||
| Package | Description | Documentation |
|
||||
|---------|-------------|---------------|
|
||||
| [mcpdotnet](src/mcpdotnet) | Core MCP implementation for .NET | [README](README.md) |
|
||||
| [McpDotNet.Extensions.AI](src/McpDotNet.Extensions.AI) | Integration with Microsoft.Extensions.AI | [README](src/McpDotNet.Extensions.AI/README.md) |
|
||||
|
||||
## Design Goals
|
||||
|
||||
This library aims to provide a clean, specification-compliant implementation of the MCP protocol, with minimal additional abstraction. While transport implementations necessarily include additional code, they follow patterns established by the official SDKs where possible.
|
||||
|
||||
## Features
|
||||
|
||||
- MCP implementation for .NET applications
|
||||
|
|
@ -40,18 +22,11 @@ This library aims to provide a clean, specification-compliant implementation of
|
|||
- Support for all MCP capabilities: Tool, Resource, Prompt, Sampling, Roots
|
||||
- Support for the Completion utility capability
|
||||
- Support for server instructions, pagination and notifications
|
||||
- Async/await pattern throughout
|
||||
- Comprehensive logging support
|
||||
- Compatible with .NET 8.0 and later
|
||||
|
||||
## Getting Started (Client)
|
||||
|
||||
To use mcpdotnet, first install it via NuGet:
|
||||
|
||||
```powershell
|
||||
dotnet add package mcpdotnet
|
||||
```
|
||||
|
||||
Then create a client and start using tools, or other capabilities, from the servers you configure:
|
||||
```csharp
|
||||
McpClientOptions options = new()
|
||||
|
|
@ -93,11 +68,11 @@ Note that you should pass CancellationToken objects suitable for your use case,
|
|||
|
||||
It is also highly recommended that you pass a proper LoggerFactory instance to the factory constructor, to enable logging of MCP client operations.
|
||||
|
||||
You can find samples demonstrating how to use mcpdotnet with an LLM SDK in the [samples](samples) directory, and also refer to the [IntegrationTests](test/McpDotNet.IntegrationTests) project for more examples.
|
||||
You can find samples demonstrating how to use ModelContextProtocol with an LLM SDK in the [samples](samples) directory, and also refer to the [IntegrationTests](test/ModelContextProtocol.IntegrationTests) project for more examples.
|
||||
|
||||
Additional examples and documentation will be added as in the near future.
|
||||
|
||||
Remember you can connect to any MCP server, not just ones created using mcpdotnet. The protocol is designed to be server-agnostic, so you can use this library to connect to any compliant server.
|
||||
Remember you can connect to any MCP server, not just ones created using ModelContextProtocol. The protocol is designed to be server-agnostic, so you can use this library to connect to any compliant server.
|
||||
|
||||
Tools can be exposed easily as `AIFunction` instances so that they are immediately usable with `IChatClient`s.
|
||||
```csharp
|
||||
|
|
@ -122,8 +97,8 @@ the employed overload of `WithTools` examines the current assembly for classes w
|
|||
`McpTool` attribute as tools.)
|
||||
|
||||
```csharp
|
||||
using McpDotNet;
|
||||
using McpDotNet.Server;
|
||||
using ModelContextProtocol;
|
||||
using ModelContextProtocol.Server;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using System.ComponentModel;
|
||||
|
||||
|
|
@ -144,9 +119,9 @@ public static class EchoTool
|
|||
|
||||
More control is also available, with fine-grained control over configuring the server and how it should handle client requests. For example:
|
||||
```csharp
|
||||
using McpDotNet.Protocol.Transport;
|
||||
using McpDotNet.Protocol.Types;
|
||||
using McpDotNet.Server;
|
||||
using ModelContextProtocol.Protocol.Transport;
|
||||
using ModelContextProtocol.Protocol.Types;
|
||||
using ModelContextProtocol.Server;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
|
||||
McpServerOptions options = new()
|
||||
|
|
@ -208,18 +183,6 @@ await server.StartAsync();
|
|||
await Task.Delay(Timeout.Infinite);
|
||||
```
|
||||
|
||||
## Roadmap
|
||||
|
||||
- Expand documentation with detailed guides for:
|
||||
- Advanced scenarios (Sampling, Resources, Prompts)
|
||||
- Transport configuration
|
||||
- Error handling and recovery
|
||||
- Increase test coverage
|
||||
- Add additional samples and examples
|
||||
- Performance optimization
|
||||
- SSE server support
|
||||
- Authentication
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
||||
This project is licensed under the [MIT License](LICENSE).
|
||||
|
|
|
|||
13
SECURITY.md
13
SECURITY.md
|
|
@ -1,13 +0,0 @@
|
|||
# Security Policy
|
||||
|
||||
The mcpdotnet team takes security vulnerabilities seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions.
|
||||
|
||||
To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/PederHP/mcpdotnet/security/advisories/new) tab.
|
||||
|
||||
**Please do not report security vulnerabilities through public issues, discussions, or change requests.**
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Please note that mcpdotnet is currently in Early Development and versions are pre-release. We strongly advise against including mcpdotnet in production systems at this time.
|
||||
|
||||
We will list supported versions here once the project is further along in development.
|
||||
18
TODO.md
18
TODO.md
|
|
@ -1,18 +0,0 @@
|
|||
# TODOs for mcpdotnet
|
||||
|
||||
## Integration Testing
|
||||
- Add comprehensive Roots feature testing once reference servers implement support
|
||||
- Consider using everything server adding `listRoots` tool)
|
||||
- Add integration tests similar to Sampling tests
|
||||
- Verify roots notification handling
|
||||
- Expand SSE test server to support all features or use a reference SSE server if one becomes available
|
||||
|
||||
## Future Improvements
|
||||
- [X] Add HTTPS/SSE transport support
|
||||
- [ ] Add more example applications showing different capabilities
|
||||
- [ ] Add comprehensive documentation for advanced scenarios
|
||||
- [ ] Profile and optimize performance
|
||||
- [ ] Linux support in stdio transport
|
||||
|
||||
## Code Improvements
|
||||
- [ ] Consolidate notification handling in McpClient to reduce duplication between SendNotificationAsync overloads
|
||||
179
build.cake
179
build.cake
|
|
@ -1,179 +0,0 @@
|
|||
#tool "dotnet:?package=GitVersion.Tool&version=6.1.0"
|
||||
#tool "nuget:?package=dotnet-sonarscanner&version=9.2.1"
|
||||
|
||||
#addin "nuget:?package=Cake.Sonar&version=1.1.33"
|
||||
|
||||
var target = Argument("target", "Default");
|
||||
var sonarLoginToken = Argument("sonarLogin", EnvironmentVariable("SONAR_LOGIN") ?? "");
|
||||
var nugetApiKey = Argument("nugetApiKey", EnvironmentVariable("NUGET_API_KEY") ?? "");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Build Variables
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
var solution = "./mcpdotnet.sln";
|
||||
var project = "./src/mcpdotnet.csproj";
|
||||
var outputDir = MakeAbsolute(Directory("./buildArtifacts/"));
|
||||
var outputDirNuget = outputDir.Combine("NuGet");
|
||||
var sonarProjectKey = "PederHP_mcpdotnet";
|
||||
var sonarUrl = "https://sonarcloud.io";
|
||||
var sonarOrganization = "pederhp";
|
||||
|
||||
var outputDirTemp = outputDir.Combine("Temp");
|
||||
var outputDirTests = outputDirTemp.Combine("Tests");
|
||||
|
||||
var codeCoverageResultFilePath = MakeAbsolute(outputDirTests).Combine("**/").CombineWithFilePath("coverage.opencover.xml");
|
||||
var testResultsPath = MakeAbsolute(outputDirTests).CombineWithFilePath("*.trx");
|
||||
|
||||
var nugetPublishFeed = "https://api.nuget.org/v3/index.json";
|
||||
|
||||
var isLocalBuild = BuildSystem.IsLocalBuild;
|
||||
var isMainBranch = StringComparer.OrdinalIgnoreCase.Equals("refs/heads/main", BuildSystem.GitHubActions.Environment.Workflow.Ref);
|
||||
var isPullRequest = BuildSystem.GitHubActions.Environment.PullRequest.IsPullRequest;
|
||||
var runSonar = !string.IsNullOrWhiteSpace(sonarLoginToken);
|
||||
|
||||
var gitHubEvent = EnvironmentVariable("GITHUB_EVENT_NAME");
|
||||
var isReleaseCreation = string.Equals(gitHubEvent, "release");
|
||||
GitVersion versionInfo = null;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// TASKS
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
Setup(context =>
|
||||
{
|
||||
Information($"Local build: {isLocalBuild}");
|
||||
Information($"Main branch: {isMainBranch}");
|
||||
Information($"Pull request: {isPullRequest}");
|
||||
Information($"Run sonar: {runSonar}");
|
||||
Information($"ref: {BuildSystem.GitHubActions.Environment.Workflow.Ref}");
|
||||
Information($"Is release creation: {isReleaseCreation}");
|
||||
});
|
||||
|
||||
Task("Clean")
|
||||
.Description("Removes the output directory")
|
||||
.Does(() =>
|
||||
{
|
||||
|
||||
EnsureDirectoryDoesNotExist(outputDir, new DeleteDirectorySettings
|
||||
{
|
||||
Recursive = true,
|
||||
Force = true
|
||||
});
|
||||
CreateDirectory(outputDir);
|
||||
});
|
||||
|
||||
|
||||
Task("Version")
|
||||
.Description("Retrieves the current version from the git repository")
|
||||
.Does(() =>
|
||||
{
|
||||
versionInfo = GitVersion(new GitVersionSettings
|
||||
{
|
||||
UpdateAssemblyInfo = false
|
||||
});
|
||||
|
||||
Information("Version: " + versionInfo.FullSemVer);
|
||||
});
|
||||
|
||||
Task("Build")
|
||||
.IsDependentOn("Clean")
|
||||
.IsDependentOn("Version")
|
||||
.Does(() =>
|
||||
{
|
||||
var msBuildSettings = new DotNetMSBuildSettings()
|
||||
{
|
||||
Version = versionInfo.AssemblySemVer,
|
||||
InformationalVersion = versionInfo.InformationalVersion,
|
||||
PackageVersion = versionInfo.SemVer
|
||||
}.WithProperty("PackageOutputPath", outputDirNuget.FullPath);
|
||||
|
||||
var settings = new DotNetBuildSettings
|
||||
{
|
||||
Configuration = "Release",
|
||||
MSBuildSettings = msBuildSettings
|
||||
};
|
||||
|
||||
DotNetBuild(solution, settings);
|
||||
});
|
||||
|
||||
Task("Test")
|
||||
.IsDependentOn("Build")
|
||||
.Does(() =>
|
||||
{
|
||||
var settings = new DotNetTestSettings
|
||||
{
|
||||
Configuration = "Release",
|
||||
Loggers = new[] { "trx;" },
|
||||
ResultsDirectory = outputDirTests,
|
||||
Collectors = new[] { "XPlat Code Coverage" },
|
||||
Filter = "(Execution!=Manual)",
|
||||
ArgumentCustomization = a => a.Append("-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover"),
|
||||
NoBuild = true
|
||||
};
|
||||
|
||||
DotNetTest(solution, settings);
|
||||
});
|
||||
|
||||
Task("SonarBegin")
|
||||
.WithCriteria(runSonar)
|
||||
.Does(() =>
|
||||
{
|
||||
SonarBegin(new SonarBeginSettings
|
||||
{
|
||||
Key = sonarProjectKey,
|
||||
Url = sonarUrl,
|
||||
Organization = sonarOrganization,
|
||||
Token = sonarLoginToken,
|
||||
UseCoreClr = true,
|
||||
VsTestReportsPath = testResultsPath.ToString(),
|
||||
OpenCoverReportsPath = codeCoverageResultFilePath.ToString()
|
||||
});
|
||||
});
|
||||
|
||||
Task("SonarEnd")
|
||||
.WithCriteria(runSonar)
|
||||
.Does(() =>
|
||||
{
|
||||
SonarEnd(new SonarEndSettings
|
||||
{
|
||||
Token = sonarLoginToken
|
||||
});
|
||||
});
|
||||
|
||||
Task("Publish")
|
||||
.WithCriteria(isReleaseCreation)
|
||||
.IsDependentOn("Test")
|
||||
.IsDependentOn("Version")
|
||||
.Description("Pushes the created NuGet packages to nuget.org")
|
||||
.Does(() =>
|
||||
{
|
||||
Information($"Upload packages from {outputDirNuget.FullPath}");
|
||||
|
||||
// Get the paths to the packages ordered by the file names in order to get the nupkg first.
|
||||
var packages = GetFiles(outputDirNuget.CombineWithFilePath("*.*nupkg").ToString()).OrderBy(x => x.FullPath).ToArray();
|
||||
|
||||
if (packages.Length == 0)
|
||||
{
|
||||
Error("No packages found to upload");
|
||||
return;
|
||||
}
|
||||
|
||||
// Push the package and symbols
|
||||
foreach (var package in packages)
|
||||
{
|
||||
DotNetNuGetPush(package, new DotNetNuGetPushSettings
|
||||
{
|
||||
Source = nugetPublishFeed,
|
||||
ApiKey = nugetApiKey,
|
||||
SkipDuplicate = true
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Task("Default")
|
||||
.IsDependentOn("SonarBegin")
|
||||
.IsDependentOn("Test")
|
||||
.IsDependentOn("SonarEnd")
|
||||
.IsDependentOn("Publish");
|
||||
|
||||
RunTarget(target);
|
||||
13
build.ps1
13
build.ps1
|
|
@ -1,13 +0,0 @@
|
|||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
Set-Location -LiteralPath $PSScriptRoot
|
||||
|
||||
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = '1'
|
||||
$env:DOTNET_CLI_TELEMETRY_OPTOUT = '1'
|
||||
$env:DOTNET_NOLOGO = '1'
|
||||
|
||||
dotnet tool restore
|
||||
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
||||
|
||||
dotnet cake @args
|
||||
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
||||
12
build.sh
12
build.sh
|
|
@ -1,12 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euox pipefail
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
||||
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||
export DOTNET_NOLOGO=1
|
||||
|
||||
dotnet tool restore
|
||||
|
||||
dotnet cake "$@"
|
||||
6
global.json
Normal file
6
global.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"sdk": {
|
||||
"version": "9.0.201",
|
||||
"rollForward": "minor"
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\mcpdotnet\mcpdotnet.csproj" />
|
||||
<ProjectReference Include="..\..\src\ModelContextProtocol\ModelContextProtocol.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
using McpDotNet.Protocol.Messages;
|
||||
using McpDotNet.Server;
|
||||
using McpDotNet.Utils.Json;
|
||||
using ModelContextProtocol.Protocol.Messages;
|
||||
using ModelContextProtocol.Server;
|
||||
using ModelContextProtocol.Utils.Json;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace AspNetCoreSseServer;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using McpDotNet;
|
||||
using ModelContextProtocol;
|
||||
using AspNetCoreSseServer;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
using System.Net.ServerSentEvents;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Channels;
|
||||
using McpDotNet.Protocol.Messages;
|
||||
using McpDotNet.Protocol.Transport;
|
||||
using McpDotNet.Utils.Json;
|
||||
using ModelContextProtocol.Protocol.Messages;
|
||||
using ModelContextProtocol.Protocol.Transport;
|
||||
using ModelContextProtocol.Utils.Json;
|
||||
|
||||
namespace AspNetCoreSseServer;
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue