mirror of
https://github.com/mcp-use/mcp-use.git
synced 2026-09-14 18:06:01 +08:00
aca5f9c040
* feat: Add PRM in the metadata discovery * fix: fallback anyway to PRM * feat: Implement complete discovery logic * feat: Final implementation of CIMD * feat: Implement PKCE * feat: Add scope from WWW-Authenticate * feat: Add all URLs possible styles * feat: Update tests and example * docs: Update docs * fix: linting * docs: update API documentation * fix: correct typos in OAuth metadata and error messages - Updated the comment in ProtectedResourceMetadata to use the correct abbreviation (PRM). - Fixed a typo in the OAuthAuthenticationError message regarding code challenge support. - Corrected the comment for legacy client paths to use "pre-registered" instead of "pre-reggistered". * feat: restructure authentication documentation and add new methods - Updated the authentication section in to group authentication methods under a new Authentication category with an icon. - Removed the old file and replaced it with new documentation files for Bearer Token, Custom Auth, and OAuth 2.1. - Introduced an overview page for authentication methods, detailing usage and configuration for each method. - Enhanced security best practices and examples for each authentication type to improve clarity and usability. * refactor: improve debug logging for OAuth metadata discovery - Updated debug messages to provide clearer context by specifying the issuer or host being queried during OAuth and OpenID Connect metadata discovery. - Enhanced error logging to remove redundant information, focusing on the failure reason without repeating the URL. * fix: correct abbreviation in ProtectedResourceMetadata documentation - Updated the abbreviation from PRC to PRM in the ProtectedResourceMetadata section to ensure accuracy in the documentation. * fix(oauth): correct RFC 8414 well-known URL construction for path-based issuers The OAuth metadata discovery was incorrectly constructing .well-known URLs by appending to the issuer instead of inserting between host and path. RFC 8414 specifies that for an issuer like https://github.com/login/oauth, the .well-known URL should be: https://github.com/.well-known/oauth-authorization-server/login/oauth We were incorrectly building: https://github.com/login/oauth/.well-known/oauth-authorization-server This fix: - Implements correct RFC 8414 URL construction (insert between host/path) - Supports OpenID Connect style as fallback (append to issuer) - Removes GitHub-specific hardcode since discovery now works correctly - Adds documentation comments explaining the two standards Ref: https://www.rfc-editor.org/rfc/rfc8414.html#section-3 * chore: oauth examples * docs: enhance OAuth endpoint discovery documentation - Updated the OAuth documentation to clarify how `mcp-use` discovers OAuth endpoints using both OAuth 2.0 and OpenID Connect standards. - Added a table detailing the URL construction methods for each standard. - Included examples for better understanding and a note on fallback behavior when the issuer has no path. * response to bs codeql * fix: update API URL Updated the GitHub API URL in the configuration to the correct endpoint for OAuth operations. --------- Co-authored-by: Enrico Toniato <2827496+tonxxd@users.noreply.github.com> Co-authored-by: pietrozullo <pietro.zullo@gmail.com>
72 lines
1.8 KiB
Python
72 lines
1.8 KiB
Python
"""
|
|
Test OAuth with Pre-registered credentials using GitHub.
|
|
|
|
SETUP REQUIRED:
|
|
1. Go to https://github.com/settings/developers
|
|
2. Click "New OAuth App"
|
|
3. Fill in:
|
|
- Application name: mcp-use-test
|
|
- Homepage URL: http://localhost
|
|
- Authorization callback URL: http://127.0.0.1:8080/callback
|
|
4. Click "Register application"
|
|
5. Copy the Client ID
|
|
6. Click "Generate a new client secret" and copy it
|
|
7. Create a .env file with:
|
|
GITHUB_CLIENT_ID=your_client_id
|
|
GITHUB_CLIENT_SECRET=your_client_secret
|
|
"""
|
|
|
|
import asyncio
|
|
import os
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
from mcp_use import MCPClient
|
|
|
|
load_dotenv()
|
|
|
|
client_id = os.getenv("GITHUB_CLIENT_ID")
|
|
client_secret = os.getenv("GITHUB_CLIENT_SECRET")
|
|
|
|
if not client_id or not client_secret:
|
|
print("Missing GITHUB_CLIENT_ID or GITHUB_CLIENT_SECRET in .env file")
|
|
print("See docstring at top of file for setup instructions")
|
|
exit(1)
|
|
|
|
config = {
|
|
"mcpServers": {
|
|
"github": {
|
|
"url": "https://api.githubcopilot.com/mcp",
|
|
"auth": {
|
|
"client_id": client_id,
|
|
"client_secret": client_secret,
|
|
"scope": "read:user",
|
|
"callback_port": 8080,
|
|
},
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
async def main():
|
|
client = MCPClient(config=config)
|
|
|
|
try:
|
|
session = await client.create_session("github")
|
|
print("Connected to GitHub MCP server!")
|
|
|
|
# List available tools
|
|
tools = await session.connector.list_tools()
|
|
print(f"\nAvailable tools ({len(tools)}):")
|
|
for tool in tools[:5]: # Show first 5
|
|
print(f" - {tool.name}")
|
|
if len(tools) > 5:
|
|
print(f" ... and {len(tools) - 5} more")
|
|
|
|
finally:
|
|
await client.close_all_sessions()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|